ko‘rinishida bo‘lgan o‘qib chiqilgan simvollar olib keladigan holatlarni aniqlaymiz. Ifodaning
barcha qisimlari va 0 dan 5 gacha raqamlar bilan belgilangan holatlar 2.2-jadvalda keltirilgan
Ko‘pxadni yozish qoidalariga ko‘ra bizning avftomatning o‘tishlarini aniqlash qiyinmas.
Masalan, 0 (“hozir termlarni o‘qib boshlaymiz”) holatidan kiruvchi faqat 1 (“koifitsient ichida”),
x simvol esa 3(“x simvolni o‘qidik, ^ ni kutyapmiz”) holatga o‘tkazadi. Holatlar orasidagi barcha
qayta ishlash dasturini yozamiz. Unda nafaqat o‘tishlarni bajarish, balki o‘qilgan simvollarning
semantik (mazmuniy) qayta ishlashni o‘tkazish kerak. Ko‘pxadni yozish qoidalariga ko‘ra
birinchi term oldida “-” ishorasi bo‘lishi mumkin emas, shuning uchun avvalo qo‘shiluvching
ishorasini sign:=+1 eslab qolamiz. Hamma vaqtda bo‘lganidek summaning boshlanish qiymati
sum:=0. O‘tishlarni dasturning asosiy siklida amalga oshiramiz. Joriy holat “katta case” (case
STATE of…) yordamida navbatdagi simvol ko‘plab xatolarga mos keluvchi “kichik case”
yordamida aniqlanadi. Variant operatorlarida simvol qanday qayta ishlanishi va holat qanday
o‘zgarishi ko‘rsatilgan. 1 va 2 holatlarga mazmuniy qayta ishlashni amalga oshiruvchi dasturidan
o‘tish ehtimoli mavjud. 0 holatga agar navbatdagi simvol raqam yoki ‘x’ bo‘lsa, o‘ylangan o‘tish
ehtimoli mavjud. Raqamni (koifitsientning katta raqamini) songa o‘tkazamiz – koef:=ord(ch)-
ord’0’. Kodni jadvallarga ‘0’, ’1’,….’9’simvollar tartib bilan kelgani uchun ord(ch)-ord(‘0’)
raqamning zaruriy sonli qiymati bo‘ladi. Keyin esa 1 – STATE:=1 holatga o‘tamiz. Agar
navbatdagi simvol ‘x’ bo‘lsa, unda uch holatga o‘tishdan oldin koef:=1 koefisientning qiymatini
eslab qolamiz. Agarda 0 holatdagi navbatdagi simvol raqam emas, ‘x’ ham emas. Unda xato
haqidagi habarni chiqaramiz va “vaqtidan oldin” yakuniy 9 holatiga o‘tamiz. 1 holatda
navbatdagi ‘+’ yoki ‘-’ simvol x darajasiga ega bo‘lmagan joriy qo‘shiluvching tugallanishini
bildiradi. Qo‘shiluvchini sign*koef kabi hisoblaymiz va umumiy sum summaga qo‘shamiz.
Keyin navbatdagi qo‘shilluvchining o‘qilgan belgisini sign ga eslab qolamiz va 0 holatga
o‘tamiz. Agar probel joriy simvol bo‘lsa ham sum:=sum+sign*koef ni bajaramiz, biroq yakuniy
9 holatga o‘tamiz. Agar kiruvchi ifodaning to‘g‘riligi kafolatlangan bo‘lsa, u holda unda
xatolarni nazorat qilish shart emas, chunki to‘g‘ri dasturni yaratishga yordam beradi. Ifodalarni
qayta ishlash bilan bog‘liq, bo‘lgan real dasturlarga xatolarni nazorat qilish (odatda yanada
kengroq) umuman zarur emas. Dasturda (2.5-listing) izzoxlari pastda keltirilgan sozlash
vositalari ishlatilgan. Ular masala yechilishining algaritimiga hech qanday dahlia yo‘q, biroq
dasturni sozlashda yordam beradi.
2.5-listing. Polikomni hisoblash (avtomat variant)
Do'stlaringiz bilan baham: