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


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ж.

... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Программалау тілдері туралы ұғым
Компьютерлер мәліметтерді өңдеу және есептеу
Оңтүстік Қазақстан экономикалық аймағының экономикалық географиялық жағдайы
Математикалық модельдерге қойылатын талаптар
Геоақпараттық технологияларды қолдану
Жалпыланған экспертті жүйенің құрылымдық сұлбасы және компоненттері жайлы ақпарат
Паскаль
Қазақстанның климатына сипаттама
Теориялық тұрғыда қалыптасқан әр түрлі, әр бағыттағы ғылыми классикалық концепцияларға мән беріп, олардың өзектілігі мен артықшылықтарын анықтау
Геометриялық интерпретация
Пәндер



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