Kompilyatorga direktivalar bu yerda to‘liq tushuntirilmaydi – buning uchun dasturlash
muhiti tarkibida help ma’lumotnomasi mavjud. Buning maqsadi – ushbu vositani esga solish va
uning nina uchun zarurligini tushunish. Misol uchun mass massivi array kabi e’lon qilingan deb
faraz qilamiz [1……N Max] of.. Agar (i>1) and (mass [i-1]=1) shartni hisoblashda i ning
qiymati 1 ga teng bo‘lsa, unga mass[0] elementining qiymatini olishga urinish massiv
chegaralaridan chiqishga va dasturga avariyani tugallanishiga olib kelishi mumkin. Balki olib
kelmasligi ham mumkin. Bu AND va OR operatsiyalarining hisoblash rejimiga hamda
hisoblashlarga massiv indeksining uning chegaralaridan tashqarida tashqariga chiqishni
tekshirilayotganligiga ham bog‘liq bo‘ladi. (i>1 and [i-1]=1) ifodaga har ikkala taqqoslash
natijalarini topish, keyin esa ular ustida and (to‘liq hisoblash) operatsiyalarini bajarish mumkin.
Biroq avvalo faqat (i>1) ni hisoblash mumkin agar uning qiymati false bo‘lsa unda birga and
operatsiyasining natijasi, ikkinchi operatsiyaning qiymati qanday bo‘lmasin, false bo‘ladi.
Shuning uchun ikkinchi operantni umuman hisoblamaslik mumkin (qisqa hisoblash). Anologik
ravishda, agar or operatsiyasining birinchi operanti true qiymatiga ega bo‘lsa, uning natijasi true
bo‘ladi, aks holda ikkinchi operantni hisoblash kerak bo‘ladi. Mantiqiy ifodalarni hisoblash
usulini pascal tilining kampilyatoridan oldin tiklash mumkin. Turbo Pascalda Turbo muhitining
options (Compiler) Compilate boolen evalution menyusining muhitida kresni qo‘yish yoki olib
tashlash mumkin. Agar bayroqcha qo‘yilgan bo‘lsa kompilyator generatsiyalangan dasturlarga
to‘liq hisoblash bajariladi. Bayroqcha qo‘yilmagan bo‘lsa qisqa hisoblash yuz beradi. Shunday
qilib dasturning kompilyatsiyasi natijasi turbo muhit sozlashlariga bog‘liq bo‘ladi, bu esa hamma
vaqt ham muqbul emas. Kompilyatsiyaning zarur rejimlarining ko‘rsatmalarini umumiy {$ …}
ko‘rinishiga ega kampilyatorga direktivalar ko‘rinishida dastur matniga kiritish qulay. “mantiqiy
qisqa hisoblashlarini o‘tkazish” direktiva {$b} ko‘rinishiga, ”to‘liq hisoblashlar o‘tkazish” – {$B
+} ko‘rinishga ega bo‘ladi. “massiv indekslarini diapazoni chegaralaridan chiqishini tekshirish”
direktivasi –{$R - } ko‘rinishida bo‘ladi. Shunday qilib (i>1) and (mas [i-1]=1) shartni hisoblash
xatolik bilan tugallanishiga olib keladi, agar uning kolleksiyasida {$B+}va {$R+} direktivilar
ta’sir ko‘rsatish mumkin. Agar dastur kodi {$R-} tasirida kompilyatsiyalansi, uning bajarilishida
massivlarning chegarasidan chiqish tekshirilmaydi. Umuman tekshirishlar dastur bajarilishini
to‘xtatadi. Chunki yakuniy kompilyatsiyadan oldin ularni odatda yo‘qotadilar. Biroq sozlash
vaqtida {$R+} ni qo‘shishni qa’tiy tavsiya qilamiz. Agar dastur massiv chegaralaridan tashqariga
chiqsa unda u noto‘g‘ri bo‘lishi mumkin, sozlash maqsadi esa xatolarni to‘g‘irlash hisoblanadi.
Shunday ekan izlashning bundan avtomatlashtirilganiga quvonish kerak. Bundan tashqari massiv
chegaralaridan tashqariga chiqishda dastur uchun ajratilgan xotira chegarasidan chiqish ehtimoli
mavjud. Ushbu xatoga “dastur xatoni keltirib chiqaradi va to‘xtatiladi” xabarini berib operatsion
sistemani ko‘rsatadi, bunda dasturlash muhiti bilan birga to‘xtatiladi. Shuning uchun “o‘zini
nazorat qiluvchi dasturning” rangi check error at line xabari xato o‘rni ko‘rsatiladi, u juda
axborotlarga boydir. To‘liq dasturga balki zarur bo‘lgan, biroq sozlashda foydali bo‘lgan
tekshirishni belgilovchi ikki direktivani eslatib o‘tamiz. {$Q+} direktivi – arifmetik
to‘ldirishlarni tekshirishni {$Q+} direktiva dasturiy oqim to‘ldirishini belgilaydi. Nihoyat, turbo
(Borland) Pascal dasturida kampilyatoriga ishlatilgan barcha direktivalarni avtomotik saqlashga
imkon beradi - yordamida ( tugmachasini bosib ushlab turib ikki marta
bosish bilan) yordamida. Biroq ushbu imkoniyatdan foydalanishni, faqatgina dastur xuddi
shunday versiyadagi kampiliyator bilan hamma vaqt transmissiyasi qilishga kafillik bo‘lsagina
tavsiya qilamiz. Agarda dastur turli xil muhitlarda (masalan Turbo pascal va Free pascal)
kompiliyatsiyalansa u holda barcha ishlatiluvchi kompilyatorlar uchun ma’nosi bir xilligi
ma’lum bo‘lgan tekshirilgan direktivalarni qo‘llash ancha yaxshi samara bo‘ladi. Yuqorida
kompiliyatorga direktivialar haqida aytilganlar faqat Turbo Paskalgagina to‘g‘ri keladi. Agarda
o‘quvchi boshqa dasturlash sistemalaridan foydalansa analogik savollarga javoblarni ushbu
sistemalar va boshqalari bo‘yicha so‘rovnomalarni qo‘llaganlardan topish mumkin. Ba’zan
bo‘lak aperatsiyalarni hisoblash usullariga bog‘liq bo‘lmagan holda dasturning xabarsiz
boshqarilishini kafillash maqsadida “agar birinchi shart bajarilgan bo‘lsa ikkinchi marta tekshir”
pirinsipidan aniq foydalaniladi. Masalan If i>1 then if mass[i-1] =1 then baxtga qarshi bunday
usul keltirilgan oddiy holda o‘rinlidir. Biroq, masalan, agar tarmoqlanish operatori and shartga
ega bo‘lgan holda else qismiga ega bo‘lsa yoki shart tarmoqlanishiga emas balki siklga mansub
bo‘lsa.
Do'stlaringiz bilan baham: