§3.19. Xotiraning dinamik taqsimoti. Ko‘rsatkich turi
Algoritmik tillarda programma obyektlariga murojaat shu obyektning nomini ko‘rsatish orqali amalga oshiriladi. Mashina tillarida esa obyektga murojaat shu obyektning xotiradagi joylashgan o‘rnining adresini ko‘rsatish orqali bo‘ladi. Statik obyektlar uchun ular adreslarini ko‘rsatish (aniqlash) translyatsiya jarayonida amalga oshiriladi.
Programma ishlashi jarayonida yuzaga keladigan va o‘lchamlari o‘zgarishi mumkin bo‘lgan programma obyektlariga dinamik obyektlar deyiladi.
Ayniqsa, statik obyektlar uchun chekli xotira (segment) ajratiladigan SHEHM larda dinamik obyektlardan foydalanish ancha samaralidir. Standart Paskal va uning SHEHMlardagi varianti Turbo-Paskal (TP) muhitida dinamik obyektlardan foydalanish imkoniyati ko‘zda tutilgan. Paskal tilida dinamik obyektlar bilan ishlash uchun maxsus ko‘rsatgich tur aniqlangan. Bu turning qiymati qandaydir programma obyektiga ko‘rsatgich bo‘lib, u orqali obyektga bevosita murojaat amalga oshiriladi. Programmada har bir dinamik obyektga ko‘rsatgich turidagi statik o‘zgaruvchi mos qo‘yiladi va u orqali dinamik obyekt ustida amallar qilinadi.
Ko‘rsatgich turidagi o‘zgaruvchining qiymati programma bajarilishi jarayonida amalga oshiriladi. Ko‘rsatgich tur sintaksisi quyidagicha
^ < tur nomi>,
bu yerda - ko‘rsatgich tur alomati, - standart yoki oldin aniqlangan tur.
Misol:
type
Vector array [1..100] of integer
dinamic_vector ^ Vector;
Var
p:^ integer; q:^char;
Dinvec:dinamic_vector;
Odatda ko‘rsatgich turidagi o‘zgaruvchilarga (p, q, dinvec) ko‘rsatgichlar deyiladi. Ko‘rsatgichlar sxema yordamida quyidagicha tasvirlanadi.
r bizning holda r
B o‘sh obyektga ko‘rsatagich nil so‘zi orqali ifodalanadi: p
Ko‘rsatgichlar qiymati programma ishlashi jarayonida paydo bo‘ladi. Buning uchun maxsus protsedura new aniqlangan new (R). Bu protsedura ishlashi natijasida faktik parametrga mos dinamik obyekt paydo bo‘ladi va ko‘rsatgich (p) shu obyektga qaratiladi.
Dinamik obyektga murojaat sintaksisi quyidagicha
^
Misol uchun
Var p:^integer;
new (p); p^:58
dinamik obyekt 58 qiymatini qabul qiladi.
Agar r o‘zgaruvchi integer turida bo‘lsa quyidagilar o‘rinli.
r : r p^ r; p^ : p^ div 2;
work_vec^[p^1] : 100;
Ko‘rsatgich turidagi o‘zgaruvchilar uchun ifoda-qiymat sifatida quyidagilar kelishi mumkin:
bo‘sh ko‘rstagich (nil);
ko‘rsatgich turidagi o‘zgaruvchi;
ko‘rsatgich turidagi funksiya.
Bu yerda ifoda turi o‘zlashtiruvchi ko‘rsatgich turi bilan mos tushishi kerak.
Do'stlaringiz bilan baham: |