Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МетодАлгКП.doc
Скачиваний:
109
Добавлен:
18.02.2016
Размер:
2.27 Mб
Скачать

Практикалық жұмыс №15

Тақырыбы: Мəліметтердің динамикалық құрылымы

Жұмыс мақсаты: Динамикалық айнымалыларды сипаттаумен танысу жəне оларды бағдарламалауда қолдана білуге дағдылану

Жұмыстың орындалу тəртібі:

  1. Теориялық мəліметтермен танысу.

  2. Тапсырмалар орындау.

  3. Бақылау сұрақтарына жауап беру.

  4. Орындалған жұмыс туралы жазбаша есеп беру. Есепте жұмыс тақырыбы, мақсаты, листингі болуы қажет.

15.1 Негізгі түсінік

15.1.1 Статикалық жəне динамикалық жады түрлері жайлы жалпы түсінік

Алдыңғы тарауларда, компиляция барысында компьютер жадынан тұрақты орын бөлiнетiн айнымалыларды қарастырдық. Жадының бұл аудандар (VAR бөлiмiнде сипатталған айнымалылар үшiн), айнымалы керек болмаса да, программа жұмысын толық аяқтағанша сақталады. Бұл жағдайда жады тиiмсiз қолданылады. Мәселен, жиымның нақты элементтер саны бойынша баптауын еске алайық немесе статикалық жады көлемi үлкен бiрнеше жиым сипатталса, ал нақты бiр уақытта олардың барлығы қолданылмаса, жағдайды, жадыны бөлудiң арнайы механизiмiн қолданып дұрыстауға болады. Турбо Паскаль тiлi, жадыны программаны орындау барысында динамикалы түрде бөлiп және босатып отыруға мүмкiндiк бередi.

Динамикалық жадының келесi артықшылықтарын атап өтуге болады:

• үнемдiлiгi және тиiмдiлiгi;

• байланысқан құрылымдарда элементтер санын динамикалық түрде өзгерту, мысалы, тiзiмдерде (статикалық жадыда элементтер саны әр компиляция үшiн тұрақты);

• статикалық айнымалылар, өздерi сипатталған блок жұмыс жасағанда ғана сақталады, ал динамикалық жадыда – блоктан шыққаннан кейiн де, программа жұмысын аяқтағанша сақталады. Динамикалы орналасқан айнымалылар VAR бөлiмiнде сипатталмайды және олардың программада аттары болмайды. Компилятор бұндай айнымалылар үшiн жадыдан орын бөлудi жоспарламайды.

15.2 Динамикалық айнымалыларды сипаттау жəне оларды қолдану

Программада динамикалық жады бөлiгiне қол жеткiзу, көрсеткiш (сiлтеме) деп аталатын, арнайы сiлтемелiк айнымалы арқылы iске асырылады.

“Көрсеткiш” типтi айнымалыда, онымен байланысқан динамикалық жады бөлiмiнiң адресi жазылады. Компилятор “көрсеткiш” типтi айнымалыға статикалық жадыдан төрт байт орнын бөледi. Əдетте, белгiлi бiр типтегi мәлiметтермен байланысқан көрсеткiш типтелген деп аталады. Бiрақ ол типсiз, кез келген типтегi мәлiметтер көрсеткiшiмен байланысқан болуы мүмкiн. Бұл жағдайда көрсеткiш бос (байлаусыз) деп аталады.

“Көрсеткiш” типiнiң сипатталу форматы:

TYPE <көрсеткiш идентификаторы>=^<тип>;

“Көрсеткiш” типi мен “көрсеткiш” типтегi айнымалыларды сипаттау мысалдары.

TYPE { типтерді дұрыс хабарлау }

P1=^WORD; { p1-WORD типтi мәндердiң “көрсеткiш” типiнiң идентификаторы}

P2=^CHAR; { p2 - CHAR типтi мәндердiң “көрсеткiш” типiнiң идентификаторы}

P4=ARRAY[1..10] OF ^REAL; {p4 - REAL типтi мәндерге сiлтеме жасайтын, көрсеткiш жиымдарының “көрсеткiш” типiнiң идентификаторы.}

{ типтердi қате хабарлау }

P5=^ARRAY[1..10] OF REAL; P6=^STRING[25];

P7=^RECORD

FIELD1: STRING [15]; FIELD2: REAL;

END;

“Көрсеткiш” типiнiң сипатталу форматында тип идентификаторы көрсетiлу керек, сондықтан стандартты идентификаторларды (INTEGER, REAL жзне т.б.) бiрден “көрсеткiш” типiнiң сипатталуында жазуға болады. P5, P6 жзне P7 типтерiнiң сипатталуындағы қателердi компилятор, бұндай жағдайда алдымен тип идентификаторын сипаттап, сонан кейiн оны басқа сипаттауларда қолдану керек болғандықтан көрсетедi.

Келесi сипаттаулар дұрыс болады:

TYPE

...

MAS=ARRAY[1..10] OF REAL; ST=STRING[25];

REC=RECORD

FIELD1: STRING [15]; FIELD2: REAL;

END; VAR

P5: ^MAS; P6: ^ST; P7: ^REC;

...

Көрсеткiш келесi үш қалып-күйдiң бiрiнде болуы мүмкiн:

1. әлi инициализацияланбаған;

2. орналастыру адресi бар;

3. алдын ала анықталған NIL тұрақтысының мәнi жазылған; мұндай көрсеткiш бос көрсеткiш деп аталады, демек ешқандай айнымалыны көрсетпейдi. NIL мзнде көрсеткiштiң әр төрт байттында