Көрсеткіштер және динамикалық облыс: Turbo Pascal тілінде жадты басқару және байланысты тізімдер


1. Динамикалық облыс.

Программамен жұмыс істеу кезінде әдетте айнымалылар мен тұрақтылардың жадтың қай орнына жазылатыны ескерілмейді де, олардың атаулары бойынша жұмыс істей беріледі. Бұл әдіс жалпы талапты қанағаттандырмайтын жағдайлар да бар. Мысалы, массивтермен жұмыс істеу үшіп оларды алдын ала сипаттап (жадтан орындар бөліп) қою керек. Кіші көлемді массивпен жұмыс істеу кезінде үлкен орын болу жадты үнемді пайдалану төсіліне жатпайды. Кейде 64 Кбайттан артық орын алатын үлкен келемді деректермен жұмыс істеуге тура келеді. Турбо Паскальда бір типті деректер үшін 64 Кбайттық, орын бөлінеді де, біраз орын бөлінген соң орын жетіспегені жөнінде хабар беріп, компьютер тоқтап қалады. Мұндай жағдайда не әшейінде де, жадты ұтымды пайдалану әдісі - көрсеткішті және динамикалық облысты пайдалану.

Көрсеткіш (Роinter) - басқа айнымалыға сілтемені (басқа сөзбен айтқанда, деректер сақталатын жад облысының кездейсоқ адресін) сақтайтын айнымалы (4-сурет)

Керсеткіш Әдеттегі айнымалы

4-сурет. Айнымалы көрсеткіш

Көрсеткіштің сипатталу түрі:

<атау> : ^тип; не <атау>: Pointer

<атау> - көрсеткіш атауы; тип - көрсеткіш сілтейтін әдеттегі ай-нымалылар типі (яғни көрсеткіш (сілтеме) күрделі деректер типтерінің бірі) ; ^ - сипатталған айнымалының көрсеткіш екенін білдіру белгісі. Мысалы, Interger типті айнымалы облысын Р көрсеткіші арқылы сипаттау арқылы var Р:^interger; арқылы жазылады.

Көрсеткішке деректерді меншіктеу жөне оқу үшін көрсеткіш атауының соңына ^ белгісін қойып жазу керек. Мысалы, р^:=25; write(p^) ; (Меншіктеу операторының орнына әдеттегідей енгізу операторын пайдадану да мүмкін: геаd(p^) ) .

Роinter көрсеткіші - айнымалыны жалпы түрде (типке байланыссыз) сипаттау.

Динамикалық облыс - программа мен деректер үшін әдетте бөлінетін сегменттен басқа, Р көрсеткіші пайдаланатын (көрсететін) жад облысы. Оны "Үйінді (Куча) " деп те атайды. Динамикалық облыстан Р адресін таңдау операторлары:

NEW (P) не Getmen(P, ‹Облыс көлемі›)

Динамикалық облыстан NEW операторы таңдайтын облыс ете үлкен болуы да мүмкін. Getmem арқылы таңдалатын облыс бүтін санмен (байтпен) беріледі, оны < Облыс көлемі> орнына қолдан енгізу керек, ол 65521-тен аспайтын кез келген сан болуы мүмкін.

NEW не Getmem операторын енгізу алдында көрсеткіш бос болып, ешнәрсеге сілтеме жасамайды. Ал, көрсеткіш пайдаланған соң оның ішіндегісін өшіріп, адресті бос етіп қойған дұрыс. Ол орындалмаса, программа бір мезетте кезекті динамикалық айнымалыны жасай алмай қалуы мүмкін.

Көрсеткішті адреске көрсетуден босату операторлары:

Dispose (P)

не Freemem (P, ‹Облыс көлемі›)

(Программада Dispose - ды New операторын пайдаланған соң, ал, Freemem-ді Getmem-нен соң енгізген жөн) .

Турбо Паскальда көрсеткіштің осы мезетте ешнәрсеге сілтемейтінін білдіретін қызметші сөз де бар - NіІ . Оның жазылуы: Р:=Nil ;

Мысал. 3. 7, 18. 4 сандарын динамикалық жадқа жазу және олардың қосындысын экранға шығару керек.

Var p1, p2, p3: ^real;

Begin pl: p2:=nil; p3:nil;

{ Бұл алғашқы кезеңде pl, p2, p3 ешнәрсеге }

{ сілтемейтінін білдіреді, сондықтан мұндай}

{операторларды енгізбеу де мүмкін}

New (pl), New (p2), New (p3)

{Берілген сандарды енгізу}

Write (сандар-?) readln (pl^, p2^)

р3^:=р1+р2^; writeln (p3^=p3^) ;

dispose (p1) ; dispose (p2) ; dispose (p3) ;

end.

Егер v1, v2 бір типті айнымалыға көрсеткіш болса, онда оларды бір-біріне меншіктеуге болады:

v1:= v2: не v2:=v1;

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

2. Жазба. Байланысты тізімдер

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

1-мысал. {Шифр, Тегі-Аты} құрылымды 1011 Ахметов Қ жазбасын көрсеткіш арқылы жадқа жазу және оны экранға шығару керек.

Program jazu

Type kst=^student

Student = record cipher: integer

Tegi: string [25] ;

End;

Var v: kst;

Begin new (v) ; v^. cipher: =1011; v^. tegi:=Ахметов Қ;

Writeln (v^. cipher:5, v^. tegi:25) ;

Dispose (v) end.

Мұндағы белгіленген: v- kst типті жадуға көрсеткіш; v^. cipher, v^tegi -жазба элементтері.

Байланысты тізім - жазбалардан тұратын бірнеше тораптан құралған тізбек. Оны байланысты түрде құру, экранға шығару және тізімге торап қосу мен қажетсіз бір торабын алып тастап әдістерінің жай деректер файлымен жұмыс әдістерін ерекшеліктері жеткілікті. Мұнда тізімнің әр элементі екі бөлімнен тұратын торап (узел) етіп қарастырылады. Бірінші бөлім - негізгі (информациялық жазба), екіншісі - келесі элементпен байланысты орнату бөлімі (11. 4-суретте оларға көрсеткіш (→) нұсқап тұр) .

→ → . . . →

Байланысты тізімнің схемалық графигі

Пайдаланған әдебиеттер:

О. Камардинов Информатика - «Турбо Паскаль тілінде программалау»бөлімі,

Алматы «Ғылым» ғылыми баспа орталығы 2004ж.

О. Сейітқұлов «Программалау тілі» - Алматы 2002ж.

... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Turbo Pascal ортасында динамикалық жадты басқару және динамикалық құрылымдар (массивтер, тізімдер, көрсеткіштер)
Turbo Pascal ортасында динамикалық деректер құрылымдары: көрсеткіштер, массивтер және байланысқан тізімдер
Delphi тіліндегі құрылымдық және динамикалық типтер: массивтер, жазбалар, көрсеткіштер және жадты басқару
Turbo Pascal тілінде массивтер және сұрыптау алгоритмдері
Турбо Паскальда көрсеткіштер мен динамикалық жадыны басқару принциптері мен қолдану технологиясы
C++ тіліндегі динамикалық тізімдер: теориясы, алгоритмдері және құжатталуы
Функциялар және олардың бағдарламалаудағы қызметі (Turbo Pascal тілінде)
Turbo Pascal тілінде файлдардың құрылымы, түрлері және файлдық операциялары
Бір өлшемді массивтер: Turbo Pascal тілінде сипаттау және қолдану
Сұрыптау және іздеу алгоритмдерінің Turbo Pascal тілінде жүзеге асырылуы
Пәндер



Реферат Курстық жұмыс Диплом Материал Диссертация Практика Презентация Сабақ жоспары Мақал-мәтелдер 1‑10 бет 11‑20 бет 21‑30 бет 31‑60 бет 61+ бет Негізгі Бет саны Қосымша Іздеу Ештеңе табылмады :( Соңғы қаралған жұмыстар Қаралған жұмыстар табылмады Тапсырыс Антиплагиат Қаралған жұмыстар kz