- •Қазақстан республикасының білім және ғылым министрлігі
- •«Информатика» пәнінің Бағдарламалау бөлімінен дәрістерге арналған
- •1. Бағдарламалау жүйелері туралы жалпы мағлұмат.
- •Есептi эем-де шығарудың негiзгi кезеңдерi
- •2. Turbo Pasсal бағдарламалау жүйесі
- •Turbo Pascal бағдарламалау ортасында жұмыс істеудің негізгі кезеңдерін қарастырайық:
- •3. Паскаль бағдарламасының құрылымы
- •4. Бағдарламалау жүйесінің негізгі компоненттері. Парадигмалары. Классификациясы.
- •3. Айнымалының алдын-ала анықталған қарапайым типтері
- •1. Шартты оператордың жалпы түрі:
- •1. Параметрлі қайталау операторы (for).
- •2. Циклдік оператордың for-downto түрі
- •1. Шартты алдын-ала тексеру арқылы қайталау жарлығы
- •Шартты соңында тексеру арқылы қайталау жарлығы
- •1. Бір өлшемді массивтер
- •2. Көп (екі) өлшемді массивтер
- •1. Жолдар.
- •2. Стандартты функциялар
- •1. Процедуралар
- •2. Функциялар.
- •1. Мәтіндік файлдар
- •2. Типтік файлдар
- •3.Типтік емес файлдар
- •Рекурсивті деректердің типтері. Байланысқан тізімдер. Стектер. Кезектер. Деректер. Ағаштар. Екілік ағаштардың негізгі амалдары. Жадының динамикалық бөлінуі. Көрсеткіштер.
- •Адрес және сiлтеме.
- •Дк жадысында үйменiң орналасуы
- •Динамикалық жадымен жұмыс атқаратын процедуралар мен функциялар:
- •Пайдаланылған әдебиеттер
Рекурсивті деректердің типтері. Байланысқан тізімдер. Стектер. Кезектер. Деректер. Ағаштар. Екілік ағаштардың негізгі амалдары. Жадының динамикалық бөлінуі. Көрсеткіштер.
Программада анықталдан барлық айнымалылар жедел жадының мәлiметтер сегментi деп аталатын үздiксiз аумағында орналасады. Сегмент ұзындығы жалпы микропроцессордың архитектурасына байланысты және 65536 байттан аспайды, сол себептi көп көлемдi массивтермен жұмыс атқарғанда әр түрлi қиындықтан шығу үшiн динамикалық жадыны пайдалану қолайлы деп саналады.
Динамикалық жады деп берiлген сегментiнен (64Кб), стек сегмент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ң мәнi жадыдағы байттың адресiнен тұрады, ал адрес екi он алты разрядтық сөзден құралады; бiрiншi сөз – сегмент нөмiрi, ал екiншi сөз – сегмент нөмiрiн ығыстыру (жылжыту) шамасы деп аталады. Сегмент - ұзындығы 64 Кб және 16-да еселi адрес басталған жадының аумағы. Ығысу шамасы қажеттi адрестегi байтқа қол жеткiзу үшiн сегменттiң басталған жерiмен қанша байтқа ығысу (шегiну) керектiгiн көрсетедi.
Турбо Паскаль 1 Мб – стандартты жадының адрестiк кеңiстiгiн сүйемелдейдi. 1 Мб кеңiстiкте адрестi көрсету үшiн екi он алты разрядтық сөздерден құралған 20 екiлiк разряд қолданылады. Адрес келесi түрде анықталады: сегменттiң нөмiрiн солда 4 разрядқа ығыстырады (яғни 16-да көбейтедi), оң жақтады босатылған 4 разряд нөлмен толтырылады, соңында осы әрекеттердiң нәтижесi ығысу мәнiмен қосылады.
Жадының 16 байт үз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н көрсетедi.
Турбо Паскаль ортасында бүкiл динамикалық жады тұтас массив байттары деп қарастырылады. Бұл тұтас массив байттары үйме (куча) HEAP деп аталады. Үйменiң бастауы HeapOrg деп аталатын стандартты айнымалыдан, ал соңы HeapEnd айнымалысында сақталынады. Динамикалық жадының бос, ағымдық шекарасын HeapPtr көрсеткiшi анықтайды.
Дк жадысында үйменiң орналасуы
-
HeapEnd
Жүйелiк аумақ
Үлкен адрестер
HeapPtr
Үйме
HeapOrg
Программа
Жүйелiк аумақ
Кiшi адрестер
Сiлтеменi анықтау
Типтелген сiлтемелер. Әдетте сiлтемелер мәлiметтердiң бiр түрiмен байланыста болады. Олар типтiк сiлтемелер деп аталынады. Типтiк сiлтеменi анықтау үшiн ^ белгi қойылады және келесi түрде сипатталады:
Type
<сiлтемелiк шаманың атауы> = ^<тип атауы>;
немесе
Var
<сiлтемелiк шаманың атауы> : ^<тип атауы>;
Мысалы:
Var
P1 : ^integer;
P2: ^real;
P3 : array [1..100,1..200] of ^real;
мәлiметтердiң нақты бiр типiмен байланыссыз сiлтемелердi баяндау мүмкiншiлiгi бар. Ол үшiн POINTER стандартты типi қолданылады:
Var
P : Pointer;
Типтелмеген сiлтемелер нақты ешқандай типпен байланыспағандықтан оны қолдану өте ыңғайлы. Бұл тип программа барысында құрылысы мен типi өзгерiп отыратын мәлiметтердi динамикалық орналастыру үшiн қолданылады.
Программада сiлтемелiк типтiң анықтамасын келтiрiп, жалпы ережелер бойынша осы типке жататын айнымалыларды сипаттауға болады.
Мысалы,
Type
P : ^integer;
PersonPointer = ^PersonRecord;
PersonRecord=Record
Name : string[20];
Job : string[20];
Next : PersonPointer;
End
Var p1,p2 : p;