Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ТехПр / 14

.docx
Скачиваний:
9
Добавлен:
24.03.2016
Размер:
46.78 Кб
Скачать

Рекурсивті деректердің типтері. Байланысқан тізімдер. Стектер. Кезектер. Деректер. Ағаштар. Екілік ағаштардың негізгі амалдары.

Жадының динамикалық бөлінуі. Көрсеткіштер.

Программада анықталдан барлық айнымалылар жедел жадының мәл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;

Динамикалық жадымен жұмыс атқаратын процедуралар мен функциялар:

  1. ADDR(x);

  2. Seg(x);

  3. Ofs(z);

  4. Ptr(Seg,Ofs)

  5. SizeOf(x);

  6. CSeg;

  7. Dseg;

  8. Dispose(TP);

  9. New(TP);

  10. GetMem(P,Size);

  11. FreeMem(P,Size);

  12. Mark(Ptr);

  13. Release(Ptr);

  14. MaxAvail;

  15. MemAvail;

Бақылау сұрақтары:

  1. Мәліметтердің динамикалық құрылымы туралы айтыңыз.

  2. Көрсеткіштер деген не және оның құрылымы?

  3. Кезектер және (стектер) ағымдармен жұмыс қалай жасалады?

  4. Адрес және сiлтеме деген не?

  5. Динамикалық жадымен жұмыс атқаратын процедуралар мен функцияларды атаңыз.

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

  1. Н.И.Культин. Программирование в Turbo Pascal 7.0 и Delphi/ -СПб.: БХВ-Санкт-Петербург, 1999.

  2. О.Камардинов. Информатика. І, ІІ-бөлімдер. –Шымкент, 2000.

  3. А.И.Гусева. Учимся программировать: PASCAL 7.0. Москва, 1998.

  4. Я.Н.Глинский, В.Е.Анохин, В.А.Ряжская. TURBO PASCAL 7.0 и DELPHI. Учебное пособие. Москва-Санкт-Петербург-Киев. 2001.

  5. А.А.Абрамов., Гнездилова Г.Г., Капустина Е.Н., Селюн М.И. Задачи по программированию. Москва. Наука, 1988.

  6. Қ.С.Әбдиев, М.Ж.Бекпатшаев. Алгоритмдеу негіздері. Алматы, 1993.

  7. Б.Бөрібаев. Информатика және компьютер. Алматы, 1996.

  8. Т.К.Досмайлов. Программалау тілі Паскаль. Алматы, 1996.

  9. Б.Қ.Накесбеков, Г.З.Халыкова. Паскаль тілінің негіздері. Алматы, 1998.

  10. Бурин Е.А. Программирование на языке Турбо-Паскаль. Алматы, 2000.

  11. Б.Д.Сыдықов.Алгоритмдеу және программалау негіздерін оқыту. А., 2003.

  12. Б.Д.Сыдықов, Н.Ә.Талпақов, К.М.Беркінбаев, Б.Ғ.Бостанов. Бағдарлама-лық және технологиялық практикум. Әдістемелік оқу құралы. А., 2004.

  13. Г.З.Халықова, Б.Ғ.Бостанов, А.Р.Тұрғанбаева. Объектілі бағдарланған программалау жүйелерінің негіздері: Оқу-әдістемелік құралы.-Алматы: Абай атындағы ҚазҰПУ, 2005.

  14. Б.Д.Сыдықов. Алгоритмдеу және программалау негіздерін оқыту. Әдістемелік оқу құралы. Кентау, 2007.

  15. Б.Д.Сыдықов. Информатика. Бағдарламалау негіздері. Оқу құралы. Кентау, 2007.

Соседние файлы в папке ТехПр