Murakkab algebriak ifodalarning munosabatlar matrisasini modellashtirish va interpretatorini yaratish

Murakkab algebriak ifodalarning munosabatlar matrisasini modellashtirish va
interpretatorini yaratish
MUNDARIJA
KIRISH ............................................................................................................................................ 2
1-BOB. MATEMATIK IFODALARNI TAHLIL QILISH MASALASI ....................................... 4
1.1. Matematik ifodalarni tahlil qilish masalasi. .................................................... 4
1.2. Stek bilan ishni loyihalashtirish. ..................................................................... 6
1.3. Ma'lumotlar tuzilmalarini tanlash uchun asoslar ............................................ 8
1.4. Stek tahlili. .................................................................................................... 12
1.5. Infiks notatsiyasiyani GPN aylantirish. ........................................................ 13
1.6. Algebraik ifodalarni xotirada saqlash uchun ma’lumotlar strukturasini 
tanlash va ularni qayta ishlash algoritmi. ............................................................. 14
1.7. Ma’lumotlarni ifodalanishini tanlash uchun tavsiyalar. ................................ 20
1.8. Algebraik ifodalarni qiymatini hisoblash algoritmlari. ................................. 22
2-BOB. FORMULANI POSTFIKS YOZUVIGA O’TKAZISH DASTURINING TARKIBIY 
QISIMLARI. .................................................................................................................................. 25
2.1. Jarayonni tahlil qilish va algoritmini ishlab chiqish bosqichlari. .................. 25
2.2. Tanlangan algoritmni va uning testlar to‘plamini asoslanishi. ..................... 27
2.3. Ishlab chiqilgan algoritmlar va ma’lumotlar tuzilmasini tavsiflash. ............. 29
2.4. Dastur uchun asosiy talablar. ........................................................................ 31
2.5. Ma’lumotlarni kiritish tilining tavsifi. .......................................................... 31
2.6. Chiqish ma'lumotlarining tavsifi. .................................................................. 33
2.7. Dasturning algoritmik jihatlari. ..................................................................... 34
III-BOB. MATEMATIK FORMULALARNI HISOBLASH JARAYONINI AMALGA 
OSHIRISH DASTURINING TAVSIFI ........................................................................................ 46
3.1 Bekusa Naura shakli (BNSH) ........................................................................ 46
3.2 Arifmetik ifodalarni tahlil qilish va hisoblash algoritmida ishlatiladigan 
texnologiya. .......................................................................................................... 48
3.3. Dasturiy ta’minotning tarkibiy qismlari va ularning tavsifi. ......................... 50
3.4.Dasturiy ta’minotning amaliy tadbiqi. ........................................................... 52
XULOSA ....................................................................................................................................... 60
FOYDALANILGAN ADABIYOTLAR RO’YXATI ................................................................... 61
ILOVA ........................................................................................................................................... 63
1 KIRISH
Mavzuning   dolzarbligi:   Amaly   masalalarni   kompyuterda   modellashtirish
jarayonida   murakkab   matematik   formulalar   hosil   bo’ladi.   Dasturlashtirish
jarayonini   avtomatlashtirish   nuqtai   nazaridan   formulalarni   tahlil   qilish   va   ularni
hissoblash uchun tarkibiy qisimlarni aniqlash hamda munosabatlar jadvalini tuzish
dolzarb masala hissoblanadi. 
Matematik   ifodalarni   tahlil   qilish   va   hissoblash   jarayonini   amalga
oshiradigan   mavjud   algoritm   va   dasturiy   taminotlarda   quydagi   kamchiliklar
mavjud:
 arifmetik ifoda xadlarini yozuvda alfabet chegaralangan;
 mavjud   elementar   funksiyalarning   barchasining   ishtiroki   hissobga
olinmagan;
 foydalanuvchilar   tomonidan   hosil   qilingan   funksiyalarga   murojat
qilish imkoniyati berilmagan;
Ushbu   kamchiliklarni   bartaraf   etish   uchun   disertatsiya   ishida,   murakkab
algebraik   ifodalarni   munosabatlar   matrisasini   modellashtirish   va   interpretatorini
yaratish masalasi qaralgan.
Tadqiqotning   maqsadi :   M urakkab   algebraik   ifodalarni   tahlil   qilish   va
hissoblash usullarini takomillashtirish, algoritmi hamda dasturiy ta’minotini ishlab
chiqishdan iborat.
Tadqiqotning   vazifalari:   Maqsadga   erishish   uchun   quyidagi   vazifalarni
bajarish lozim:
 matematik   ifodalarning   tarkibiy   qisimlari:   bir   had,   matematik   funksiya,
foydalanuvchi   funksiyasi,   son,   o’zgaruvchilarni   aniqlash   hamda   ularni
sintaktik ta’rifini berish;
 matematik ifodalarni  sintaktik tahlilini algoritmi va dasturini ishlab chiqish;
 ma’lumotlar   stekini   tashkil   etish   va   ularni   qayta   ishlash   algoritmini     va
dasturini ishlab chiqish;
2  berilgan   matematik   ifodani   polyakcha   (postfiks)   yozuvini   hosil   qilish
algoritmi va dasturini ishlab chiqish;
 postfiks yozuvidagi ifodani hisoblash algoritmi va dasturini tuzish;
 obyektga   yo‘naltirilgan   yondashuv   asosida   dasturni   amalga   oshirish
konsepsiyasini ishlab chiqish;
 dasturiy ta’minot tavsiflash va undan foydalanish yo’riqnomasini tayorlash.
Tadqiqot ob’yekti   matematik formulalar, ma'lumotlar strukturasi, infiks va
prefiks yozuvlari, ifodani hisoblash texnologiyasi
Tadqiqot   predmeti   matemati   formulani   tuzilishini   tahlil   qilish,   uni
hisoblashni amalga oshirish usullari va vositalari.
Tadqiqotning   ilmiy   yangiligi,   arifmetik   ifodalarni   tahlil   qilish   va
hisoblashda   matematik   va   foydalanuvchilar   funksiyasini   inobatga   olinganligi   va
polyakcha yozuvni hosil qilish algoritmini takomillashtirilganligi bilan izohlanadi. 
Tadqiqotning   amaliy   ahamiyati:   amaly   masalalarni   kompyuterda
modellashtirish   jarayonida   hosil   bo’ladigan   formulalarni   tahlil   qilish   hisoblash
jarayonini avtomatlashtirish imkoniyatini beradi. 
Ishning   tuzilishi   va   hajmi .   Ish   kirish   qismi,   uchta   bob,   xulosa   qismi,
foydalanilgan adabiyotlar ro‘yxati va ilovadan iborat bo’lib, __ betni tashkil qiladi.
Dissertatsiya mavzusi bo’yicha chop etilgan ilmiy ishlar.
Azizov S. A Suni’y aql o’yinini modellashtirish .   // “Umumta’lim maktablari
ta’lim   jarayonida   axborot-kommunikasiya   texnologiyalaridan   foydalanishning
dolzarb   muammolari   va   yechimlari”   respublika   ilmiy-amaliy   onlayn   anjumani .
Navoiy  2021-yil 23-iyun, [165-168]
Sayidqulov.A.X,   Azizov   S.A     Mantiqiy   ifodalarni   hisoblash   dasturiy
ta’minoti// “Fan, ta’lim va texnikani innovatsion rivojlantirish masalalari” xalqaro
ilmiy-amaliy onlayn anjuman. Andijon 2022-yil 12-aprel, [45-48]
3 1-BOB.  MATEMATIK IFODALARNI TAHLIL QILISH MASALASI
1.1. Matematik ifodalarni tahlil qilish masalasi.
Amaly   masalalarni   kompyuterda   modellashtirish   jarayonida   murakkab
matematik   formulalar   xosil   bo’ladi.   Dasturlashtirish   jarayonini   avtamatlashtirish
nuqtai   nazaridan   ushbu   formulalarni   tahlil   qilish   va   ularni   hissoblash   uchun
tarkibiy   qisimlarni   aniqlash   hamda   munosabatlar   jadvalini   tuzish   dolzarb   masala
hissoblanadi.   Matematik   ifodalarni   tahlil   qilish   va   munosabatlarini   aniqlash
jarayonida ularni uch xil ko’rinishda ifodalash mumkin:
 infiks shakli - arifmetik amal belgisi ifodalar orasida joylashgan (masalan, "a
+ b");
 postfiks shakli(teskari polyakcha yozuv) - arifmetik amal belgisi ifodalardan
keyin joylashgan ("a b +");
 prefix(to’g’ri   palyakcha   yozuv)-   arifmetik   amal   belgisi   ifodalardan   oldin
joylashgan prefiks shakli ("+ a b").
Matematik   ifodalarni   tahlil   qilish   deganda   ulardagi   qavslar   mosligini   qism
ifodalardagi   o’zgaruvchilarni   to’g’ri   shakillantirilganligini   (matematik   ifodani
sintaksis   ta’rifiga   asosan)   hamda   arifmetik   amallarni   to’g’ri   yozilganligi   qismiy
ifodalarga   mosligi   hamda   ularning   proritetiga   mos   ravishda   qo’yilganligini
tekshirish   tushuniladi.   Hozzirgi   paytda   mavjud   algaritm   va   dasturiy   taminotlarda
quydagi kamchiliklar mavjud:
 arifmetik ifoda xadlarini yozuvda alfabet chegaralangan;
 mavjud   elementar   funksiyalarning   barchasining   ishtiroki   hissobga
olinmagan;
 foydalanuvchilar   tomonidan   hosil   qilingan   funksiyalarga   murojaat
qilish imkoniyati berilmagan;
Ushbu   disertatsiya   ishining   maqsadi   yuqorida   qayd   qilingan
kamchiliklarni bartaraf qilgan holda algaritm va dasturiy taminot ishlab chiqishdan
iborat.
4 Teskari   polyakcha   yozuvi   1950-1920-yilda   Polyakchalik   matematik   Yan
Lukasievich tomonidan taklif qilingan. 
1971   yilda   Forth   original   dasturlash   tili   paydo   bo'ldi   va   unda   arifmetik
ifodalarni hissoblash stekda amalga oshirildi. 
                   Mazkur  ishda ifodalarni  polyakcha yozuvi  ko’rinishida mashinada ishlov
berish uchun qulay shaklga o‘tkazish algoritmlari o‘rganiladi va ifodani infiksdan
postfiks shakliga o‘tkazish algoritmi ham amaliyotga tatbiq etiladi.
Teskari   polyak   yozuvi   bir   qator   ajoyib   xususiyatlarga   ega   bo'lib,   arifmetik
ifodani kompilyatsiya jarayonida oraliq til ifodasiga aylantiradi.
Birinchidan, teskari polyak yozuvida yozilgan ifodani hisoblash bitta qidiruv
orqali amalga oshirilishi mumkin, bu dasturlar uchun obyekt kodini yaratishda juda
qulaydir.
Ikkinchidan,   asl   ifodadan   teskari   polyak   yozuvini   olish   Dijkstra   tomonidan
taklif qilingan oddiy algoritm - ustuvorliklarga ega steklar usuli asosida juda sodda
tarzda amalga oshirilishi mumkin.
Ushbu   usul   ustuvorliklarga   ega   stekdan   foydalanishga   asoslangan   bo'lib,   u
ifodadagi   arifmetik   amallar   belgilarining   tartibini   teskari   polyak   yozuvini   olish
uchun o'zgartirish imkonini beradi.
Teskari   palyakcha   yozuvining   yana   bir   o'ziga   xos   xususiyati   shundaki,
barcha   qismiy   ifodalar   amal   belgisidan   oldin   joylashtiriladi.   Umuman   olganda,
arifmetik ifoda yozuvi quyidagicha ko'rinishga keltiriladi:
 Hosil   bo’lgan   ifoda   yozuvi   qismiy   ifodalar   va   amallar   ketma-
ketligidan   iborat.   Ifodadagi   qismiy   ifodalar   yozilayotganda   bo'sh
joylar bilan ajratiladi.
 Ifoda chapdan o'ngga o'qiladi. Ifodada amal belgisi uchraganda, uning
oldidan   kelgan   oxirgi   ikkita   qismiy   ifoda   yozilish   tartibida   tegishli
amal bajariladi. 
Qolgan amallar ham ushbu tarzda bajariladi.
5 Teskari   palyakcha   yozuvining   unar,   uchlik   va   operandlarning   boshqa   har
qanday   soni   bilan   amallariga   aniq   kengaytmasi:   ifodani   baholashda   bunday
amallarning   belgilaridan   foydalanganda,   amal   oxirgi   uchrashilgan   operandlarning
mos keladigan soniga qo'llaniladi.
Teskari polyakcha yozuvining xususiyatlari quyidagilardan iborat:
• Infiks yozuvida bo'lgani kabi, bir xil ifoda bir necha xil usullarda yozilishi
mumkin.   Masalan     (10   -   15)   *   3   ifodasi   10   15   -   3   *   yoki   3   10   15   -   *   shaklida
yozilishi mumkin.
•   Qavslar   yo'qligi   sababli,   teskari   polyakcha   yozuvi,   infiks   yozuvidan
qisqaroq   bo’ladi.   Shu   sababli,   kalkulyatorlarda   hisoblash   jarayonida   hissoblash
jarayoni   tezligi   oshadi,   dasturda   esa   hisob-kitoblarni   tavsiflovchi   dastur
qismlarining hajmi kamayadi. Bu esa xotira sarfi bo’yicha muhim hisoblanadi.
1.2. Stek bilan ishni loyihalashtirish.
Ma'lumotlar   strukturasi   jismoniy   va   mantiqiy   jihatdan   bog'liq   bo'lgan
o'zgaruvchilar va ularning qiymatlari to'plamidir.
Ketma-ketlik   - bu tartiblangan o'zgaruvchilar to'plami bo'lib, ularning soni
har xil bo'lishi mumkin.
Stek   -   bu   elementlar   ketma-ketligi   bo'lib,   unga   elementlarni   kiritish   va
ulardan chiqarib tashlash faqat bir chetidan amalga oshiriladi.
Ketma-ketlikning boshlanishi stekning pastki qismi, elementlar qo'shiladigan
va   undan   chiqarib   tashlangan   ketma-ketlikning   oxiri   stekning   yuqori   qismi   deb
ataladi.   Yangi   elementni   qo'shish   (stekga   yozish)   amali   umumiy   qabul   qilingan
Push   (yuklash)   nomiga   ega,   yo'q   qilish   amali   esa   Pop .   Push   va   Pop   amallari
manzilsiz:   ularni   bajarish   uchun   elementlarning   joylashuvi   haqida   qo'shimcha
ma'lumot talab qilinmaydi.
1.1-rasm.
6  
Dasturlashda   stekning   juda   mashhurligi   stekga   elementlarni   yozishning
berilgan   ketma-ketligi   bilan   (masalan,   A-B-C)   ular   teskari   tartibda   (C-B-A)
olinishi   bilan   izohlanadi.   Ya'ni,   ushbu   harakatlar   ketma-ketligi   funktsiya
chaqiruvlarini   joylashtirish,   til   konstruktsiyalarining   ta'riflarini   joylashtirish   va
boshqalar kabi tushunchalarga mos keladi.
Shuning uchun, biz jarayonlarni, tuzilmalarni, ta'riflarni joylashtirish haqida
gapiradigan   bo'lsak,   bunday   joylashtirishni   amalga   oshirish   mexanizmi   stek
hisoblanadi:
      •   funksiya   chaqirilganda   qaytish   manzili   (chaqiriqdan   keyingi   buyruqning
manzili)   stekda   saqlanadi,   shu   bilan   teskari   tartibda   tiklanishi   mumkin   bo‘lgan
funksiya chaqiruvlarining “tarixi” hosil bo‘ladi;
      •   Ichki   til   konstruksiyalarini   tahlil   qilishda   tarjimonlar   pastga   surish   (stek)
avtomatlaridan   foydalanadilar,   stek   esa   to‘liq   tahlil   qilinmagan   til
konstruksiyalarini o‘z ichiga oladi.
Ma'lumotlar stekda qanday saqlanishi haqida umumiy atama mavjud -  LIFO
(oxirgi kir - birinchi chiqadi, "oxirgi kir - birinchi chiqadi").
Stekning   muhim   xususiyati   uning   elementlarining   nisbiy   adreslanishidir.
Darhaqiqat,   stekda   saqlangan   element   uchun   uning   ketma-ketlikdagi   mutlaq
pozitsiyasi   emas,   balki   uni   to'ldirish   "tarixini"   aks   ettiruvchi   stekning   yuqori
qismiga   yoki   uning   ko'rsatkichiga   nisbatan   pozitsiyasi   muhimdir.   Shuning   uchun
stek elementlari stek ko'rsatkichining joriy qiymatiga nisbatan murojaat qilinadi.
Deyarli barcha kompyuterlarning arxitekturasi apparat stekidan foydalanadi.
Bu kompyuterning ichki (RAM) xotirasining oddiy maydoni bo'lib, u bilan maxsus
registr   ishlaydi   -   stek   ko'rsatkichi.   Uning   yordami   bilan   protsessor   turli
o'lchamdagi baytlar va mashina so'zlari to'plamidan saqlash va tiklash uchun Push
va   Pop   amallarini   bajaradi.   Uskunalar   to'plami   va   ko'rib   chiqilayotgan   model
o'rtasidagi   yagona   farq   uning   tom   ma'noda   "teskari"   joylashishi,   ya'ni   uni   yuqori
manzillardan past manzillargacha to'ldirishdir.
7 1.3. Ma'lumotlar tuzilmalarini tanlash uchun asoslar
Muammoni hal qilish uchun biz stek yoki ikkilik daraxtdan foydalanishimiz
mumkin.   Ammo   bu   muammoni   hal   qilish   uchun   stekning   afzalliklari   balkim
amalga oshirish uchun itegratsiyadan foydalanamiz. Amalga erishganimizda, uning
operandlari   oldingi   ikkita   element   bo'ladi.   Ya'ni,   bu   struktura   LIFO   tamoyilidan
foydalanadi   (Oxirgi   kiradi   -   birinchi   chiqadi).   Xuddi   shu   xizmat   printsipi   stekda
amalga oshiriladi. Shuning uchun uni ishlatish eng qulay hisoblanadi.
Stek(inglizcha   Stek-   stack)   -   LIFO   elementlariga   kirish   usuliga   ega
ma'lumotlar strukturasi. Steklar ketma-ket elementlarni bog'laydigan ko'rsatkichlar
yordamida   amalga   oshiriladi.   Ushbu   amalga   oshirish   bizni   stekni   saqlash   uchun
qo'shni   xotira   maydonidan   foydalanishdan   hamda   stek   elementlarini   kiritish   yoki
olib   tashlashda   elementlarni   ko'chirishdan   ozod   qiladi.   Biroq,   bu   qulaylik   uchun
narx ko'rsatkichlarni saqlash uchun qo'shimcha xotira hisoblanadi.
Ushbu   amalga   oshirishda   stek   hujayralardan   iborat   bo'lib,   ularning   har   biri
stek   elementi   va   keyingi   katakchaga   ko'rsatgichni   o'z   ichiga   oladi.   Agar   stek   a1,
a2, …, an elementlardan iborat bo‘lsa, u holda i = 1, 2, …, n-1 uchun ai elementi
joylashgan   katakda   ai+1   elementi   joylashgan   katakcha   ko‘rsatkichi   ham   mavjud.
Elementni o'z ichiga olgan katakda nol (nol) ko'rsatgich mavjud. Bundan tashqari,
a1   ni   o'z   ichiga   olgan   katakka   ishora   qiluvchi   sarlavhali   katak   ham   mavjud.
Sarlavha katagida stek elementlari mavjud emas. Bo'sh stek bo'lsa, sarlavhada hech
qanday   hujayraga   ishora   qilmaydigan   nol   ko'rsatkichi   mavjud.   Stek   1.2-rasmda
ko'rsatilgan.
1.2-rasm. Stek
Postfiks   qatoridagi   har   bir   amal   ushbu   satrning   oldingi   ikkita   operandiga
ishora qiladi. Faraz qilaylik, biz operandni o'qiganimizda, uni stekga suramiz. Biz
amalga erishganimizda, uning operandlari eng yuqori ikkita element bo'ladi. Keyin
8 ushbu   ikkita   operandni   ajratib   olishingiz   va   ular   ustida   belgilangan   amalni
bajarishingiz   va   natijani   stekga   surishingiz   mumkin.   Bu   uni   keyingi   amal   uchun
operand sifatida foydalanishga imkon beradi.
Ikkilik   daraxtdan   foydalanib,   formulalar   daraxtini   qurish   va   kesib   o'tish
uchun   murakkab   va   mashaqqatli   protseduralarni   yozishimiz   kerak   bo'ladi,   shu
bilan   birga   stekga   element   qo'shish   protseduralari   oddiy   va   foydalanish   uchun
qulay.
Ikkilik   daraxtdan   foydalangan   holda   misol   yordamida   algoritmni   ko'rib
chiqamiz (algoritm 1)
Algoritm 1.
Oddiy arifmetik ifoda berilgan bo’lsin:
(A+B)*(C+D)-E (1)
Keling,   bu   ifodani   daraxt   sifatida   ifodalaylik,   unda   amallar   tugunlarga,
operandlar   esa   shoxlarga   mos   keladi.   Chap   filial   amalning  chap   operandiga,   o'ng
filial esa o'ng operandga mos keladi. Ifodalar daraxti (1) 1.3-rasmda ko'rsatilgan.
 
                                        
                                                                                               E
          A                                  B                  C                                 D
1.3-rasm.
9+ +* - Keling, daraxt bo'ylab sayohat qilaylik, bu orqali daraxt tugunlari va shoxlari
belgilaridan belgilar qatorining shakllanishini tushunamiz. Biz eng chap novdadan
o'ngga o'tamiz va chiqish chizig'idagi tugunni faqat uning barcha shoxlarini ko'rib
chiqqandan keyin qayta yozamiz. Daraxtlarni kesish natijasi quyidagicha ko'rinadi:
AB+CD+*E- (2)
(2)   ifodaning   xarakterli   xususiyatlari   shundan   iboratki,   amallar   belgilari
operandlar   belgilaridan   keyin   keladi   va   qavslar   yo'qligi.   Bunday   belgi   teskari
polyak yozuvi deb ataladi.
Teskari polyak yozuvi bir qator ajoyib xususiyatlarga ega bo'lib, uni tarjima
uchun ideal oraliq tilga aylantiradi.
Birinchidan, teskari polyak yozuvida yozilgan ifodani hisoblash bitta qidiruv
orqali amalga oshirilishi mumkin, bu dasturlar uchun obyekt kodini yaratishda juda
qulaydir. Masalan, (2) ifodani quyidagicha hisoblash mumkin:
T / r Tahlil qilinadigan qator Amal
0 AB + C D + * E - r1=A+B
1 r1 C D + * E - r2=C+D
2 r1 r2 * E - r1=r1*r2
3 r1 E - r1=r1-E
4 r1 Hisoblash tugallandi
bu yerda r1,r2 yordamchi o‘zgaruvchilardir.
Algoritm 2.
Ikkinchidan, asl ifodadan teskari polyak yozuvini olish Deykstra tomonidan
taklif   qilingan   oddiy   algoritmga   asoslanib   (2-algoritm)   juda   oddiy   tarzda   amalga
oshirilishi   mumkin.   Buning   uchun   amallarning   stek   ustuvorligi   tushunchasi
kiritilgan (1.1-jadval):
10 1.1-jadval
Amal Ustuvorlik
( 0
) 1
+|- 2
*|/ 3
** 4
Manba   belgilar   qatori   chapdan   o'ngga   skanerlanadi,   operandlar   chiqish
qatoriga yoziladi va amal belgilari quyidagi fikrlarga asoslanib stekga suriladi:
• agar stek bo'sh bo'lsa, u holda kirish qatoridan amal stekga qayta yoziladi;
•   amal   yuqori   yoki   teng   ustuvorlikdagi   barcha   amallarni   stekdan   chiqish
qatorigacha ochadi;
• agar manba qatoridan keyingi belgi ochuvchi qavs bo'lsa, u holda u stekga
suriladi;
•   yopish   qavs   stekdan   eng   yaqin   ochiladigan   qavsgacha   bo'lgan   barcha
amallarni ochib beradi, qavslarning o'zi chiqish satriga yozilmaydi, balki bir-birini
yo'q qiladi.
(1) ifodaning   teskari   Polyakcha   yozuvini   olish   jarayoni   sxematik   tarzda   1.4-
rasmda keltirilgan:
11 1.4. Stek tahlili.
Teskari   polyakcha   yozuvidagi   ifodalarni   baholashni   avtomatlashtirish
stekdan foydalanishga asoslangan. Stekmashinasi uchun hisoblash algoritmi oddiy:
1. Kirish belgisiga ishlov berish.
2. Agar operand kirish sifatida berilsa, u stekning tepasiga joylashtiriladi.
3.   Agar   kiritishga   amal   belgisi   berilgan   bo'lsa,   u   holda   qo'shish   tartibida
olingan   stekdan   olingan   qiymatlarning   kerakli   soni   bo'yicha   tegishli   amal
bajariladi. Amalga oshirilgan amal natijasi stekning yuqori qismiga joylashtiriladi.
4.   Agar   kiritilgan   belgilar   to‘plami   to‘liq   qayta   ishlanmasa,   1-bosqichga
o‘ting.
Kiritilgan belgilar to'plami to'liq qayta ishlanganidan so'ng, ifodani baholash
natijasi stekning yuqori qismida joylashgan.
Stek   mashinasini   dasturiy   ta'minotda   ham,   apparatda   ham   amalga   oshirish
juda   oddiy   va   juda   samarali   bo'lishi   mumkin.   Teskari   polyak   yozuvi   butunlay
birlashtirilgan   -   u   asosan   birlik,   ikkilik,   uchlik   va   boshqa   har   qanday   amallarni,
shuningdek,   funksiya   chaqiruvlarini   xuddi   shu   tarzda   yozadi,   bu   esa   qo'llab-
quvvatlanadigan amallar to'plamini kengaytirish bilan birga hisoblash qurilmalarini
12Ko‘rilayotgan
belgi 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Kiruvchi qator ( A + B ) * ( C + D ) - E
Stek holati ( ( +
( +
( * (
* (
* +
* +
(
* *
(
* - -
Chiquvchi
qator A B + C D + * E - loyihalashni   murakkablashtirmaslik   imkonini   beradi.   Bu   ba'zi   ilmiy   va
dasturlashtiriladigan   kalkulyatorlarda   teskari   Polyakcha   yozuvidan   foydalanishga
sabab bo'ldi.
1.5. Infiks notatsiyasiyani GPN aylantirish.
Edsger   Dijkstra   ifodalarni   infiks   belgisidan   GPN   ga   aylantirish   algoritmini
ixtiro   qildi.   Algoritm   temir   yo'l   uchastkalarida   sodir   bo'layotgan   ishlarga
o'xshashligi uchun "marshalling yard" deb nomlangan. Infix yozuvi - bu ko'pchilik
foydalanadigan matematik belgilar shaklidir (masalan, 3 + 4 yoki 3 + 4 * (2 - 1)).
FTA   hisoblash   algoritmi   singari,   marshalling   yard   algoritmi   stekga   asoslangan.
O'zgartirishda   ikkita   matn   o'zgaruvchisi   ishtirok   etadi:   kirish   va   chiqish   satrlari.
Konvertatsiya jarayoni chiqish satriga hali qo'shilmagan operatorlarni saqlaydigan
stekdan foydalanadi. O'zgartirish dasturi kiritilgan satr belgilarini belgilar bo'yicha
o'qiydi   (belgi   harf   bo'lishi   shart   emas),   qaysi   belgi   o'qilganiga   qarab   har   bir
qadamda ba'zi amallarni bajaradi.
Algoritm
* Hali o'qilishi kerak bo'lgan belgilar mavjud.
* Keyingi belgini o'qing.
* Agar belgi raqam bo'lsa, uni chiqish qatoriga qo'shing.
* Agar belgi funktsiya belgisi bo'lsa, uni stekga suring.
* Agar belgi ochiq qavs bo'lsa, uni to'plamga suring.
* Agar belgi yopish qavs bo'lsa:
To'plamning yuqori elementi ochiladigan qavs bo'lgunga qadar, elementlarni
stekdan chiqish satriga oching. Bu stekdan ochiladigan qavsni olib tashlaydi, lekin
uni   chiqish   satriga   qo'shmaydi.   Agar   ushbu   bosqichdan   so'ng   funktsiya   belgisi
stekning   tepasida   bo'lsa,   uni   chiqish   satriga   suring.   Agar   stek   ochiladigan   qavsni
uchratmaguncha tugagan bo'lsa,  bu ifodada chegaralovchi  noto'g'ri  joylashtirilgan
yoki qavslar mos kelmaganligini anglatadi.
13 1.6.  Algebraik ifodalarni xotirada saqlash uchun ma’lu m otlar strukturasi n i
ta n lash va ularni qayta ishlash algoritmi.
M a’lu m otlari   m urakkab   tarkibli   masalalarni   yechish n i n g   m uhi m   jihatlari
quyidagicha bo’ladi: 
 m a’lu m otlarni   kiritish   yoki   chiqarish   va   ularning   turlari   bilan   bog’liq
bo’ladiga n  muammolarni aniqlash; 
 dasturlash   tili   imkoniyatlari   asosida   m a’lu m otlar n i   turlarga   ajratish   va   ular
ustida amal bajarish muammosi.
Ifodalarni xotirada saqlash uchun ma’lu m otlar strukturasi n i ta n lanishi lozim
va ular quyidagi ko’rinishlarda bo’lishi mumkin:
Ro’yxat   turi.     Ro’yxat n i n g   har   bir   elementi   berilga n   bazisi   tur n i
ifodalaydiga n   ele m e n tlar   to’pla m i n i   tashkil   qiladi.   Ro’yxat   ele m e n tlari n i n g   so n i
u n i n g   uzu n ligi   deyiladi   va   bir   xil   turdagi   ro’yxatlarda   ele m e n tlar   so n i   har   xil
bo’lishi   m u m ki n .   Ro’yxat   uchu n   boshla n g’ich ,   oxirgi   va   n avbatdagi   va   ay n i
paytdagi   ele m e n t   tushu n chalari   mavjud.   Joriy   ele m e n t —   ro’yxat n i n g   shu n day
ele m e n tiki ,  u aniqlanga n  paytda uni qayta ishlash uchu n  ruxsat berilga n  bo’ladi.
Ro’yxat ustida quyidagi bazis operatsiyalar bajariladi:
 bo’sh ro’yxat n i tuzish; 
 ro’yxat bo’shligi n i tekshirish; 
 n avbatdagi yoki ay n i paytdagi ele m e n tlar  m avjudligi n i tekshirish;
 ro’yxat n i n g   biri n chi ,   oxirgi ,   ay n i   paytdagi   yoki   n avbatdagi   ele m e n tlari
darajasini aniqlash; 
 joriy ele m e n t xususiyatlari ta n lash; 
 joriy ele m e n t xususiyatlari n i al m ashtirish; 
 joriy   ele m e n t n i   hozirgi   va   n avbatdagi   ele m e n tlar n i n g   xususiyatlari n i
saqlaga n  holda ro’yxatda n  o’chirish. 
Ro’yxat   ustida   chekla n ga n   bazi   amallar   m aj m uasi   orqali   shu n day
m a’lu m otlar   strukturasi n i   hosil   qilish   m u m ki n ki ,   huddi   n avbat   va   stekdagi   kabi
amallar ketma-ketligini bajarish qatiy bo’ladi.
14 N avbatda   ele m e n tlarni   qayta   ishlash   “biri n chi   kelga n -biri n chi   ketadi   ” ,
stekda esa “oxirgi kelga n - biri n chi ketadi” pri n sipi asosida bajariladi.
N    avbat   turi.        N avbat   ro’yxat   ustida   bazali   amallar   m aj m uasi   bo’lib ,   unda
to’rtta operatsiya bajariladi: 
 bo’sh  n avbat n i tuzish;
 n avbat n i bo’shligi n i tekshirish;
 n avbatda qayta ishlanadigan ele m e n t n i ta n lash;
 tanlangan element ustida ko’rsatilgan amalni bajarish;
Stek   turi.     Stek   ha m   ro’yxat   ustida   bazali   amallar   m aj m uasi   bo’lib ,   unda
beshta operatsiy bajariladi: 
 bo’sh stek tuzish; 
 stek n i n g bo’shligi n i tekshirish; 
 stek cho’qqisidagi amalni bajarish;
 stekda n  oxirgi ele m e n t n i o’chirish;
 stek n i n g oxirgi ya n gi ele m e n i kiritish.
Daraxt turi.   Daraxtda biri n chi ele m e n t ildiz, oxirgilari esa uchlari deyiladi.
Daraxt  ildizi   uchlari n i n g otasi ,   otada n   keyi n gi  uchlar   ildiz n i n g o’g’illari  deyiladi.
Daraxt ildizi n i n g biri n chi uchlari katta o’g’il ,  keyi n gilari esa ukalari deyiladi.
Daraxt uchu n  bazali amallar  m aj m uasi quyidagilarda n  iborat: 
bazali tur ele m e n tlari orqali trivial daraxt tuzish;
daraxt ildizini ta n lash va uning vorislarini aniqlash;
daraxt uchlari uchu n  bazali operatsiyalar n i aniqlash va bajarish.
Orgraflar   turi.          Ba’zi   bazali   turlar   orqali   T   va   Q   strukturalar   to’pla m i n i
a n iqlaydi ,   T — ro’yxat     ele m e n tlari-uchlar   deyiladi   va   Q-ro’yxat   ele m e n tlari —
yoylar  deyiladi.  Har  bir  uchlar  uchu n   yoylar  ro’yxati   m avjud ,   ya’ n i  bu uchlarda n
chiquvchi va boshqa uchlarga kiruvchi yoylar ro’yxati  m avjud.
Ro’yxat   uchlar   va   yoylar n i n g   bo’sh   ro’yxatida n   tuzilga n   bo’lsa ,   u   bo’sh
bo’ladi.   Faqat   bitta   uchda n   (yoylari   yo’q)   iborat   graf   esa   trivial   deyiladi.   Bazali
15 operatsiyalar to’pla m i bo’sh graf  tuzishga   i m ko n  beradi va bazali operatsiyalar n i
ular n i n g ixtiyoriy ro’yxati bila n   ishlash n i imkonini beradi.
Shu n day   qilib   ma’lumotlar   strukturasi   aniqlangandan   so’ng ,   algorit mn i n g
yozilishi 2 qis m da n  iborat bo’ladi:
1.   Dasturlash   tili   ko n struksiyasi   bo’lol m aydigan ,   leki n     algorit m   yozishda
qo’llasa bo’ladiga n   m a’lu m otlar va operatorlar n i n g yozilishi aniqlash;
2.   M ate m atik   va   shu n ga   o’xshash   qulay   belgilar n i   qo’llab ,   m a’lu m otlar   va
operatorlar   turlari n i   dasturlash   tili   ko n struksiyasi   ata m alari   yorda m ida   algorit m
qada m lari n i yozish.
Qaytishli izlash.
Qaytish n i n g u m u m iy uslubi ta n la n ga n   qaytuvchi yo’l n i n g    m u m ki n   bo’lga n
qis m iy   yechi m lari n i   bildiradi.   M u m ki n   bo’lga n   qis m iy   yechi m lar   tushu n chasi
orqali   algorit mn i n g qaytishli  izlashi  for m ulalarda tasvirla n adi. Bu  usul — qaytishli
izlash   usuli   joriy   qis m iy   yechi m   qada m lari n i   ko’p   karrali   ke n gaytirishga
asosla n ga n . Agar ke n gaytirish izlash n i n g hozirgi qada m larida  m u m ki n  bo’l m asa ,  u
holda   dastlabki   qisqaroq   qis m iy   yechi m ga   qaytish   sodir   bo’ladi   va   u n i
ke m gaytirishga harakat qili n adi.
U m u m iy   hol n i   qaray m iz ,   qacho n ki   m asala n i n g   yechi m i   uzu n ligi
a n iqla nm aga n   ( a
1 , a
2 , ...)   vektor   ko ’ ri n ishiga   ega   bo ’ lsa ,   vektor   yuqorida n  ( a n iq   yoki
n oa n iq )   r - so n   bila n   chegarala n ga n .   a
i   lar n i n g   har   biri   chiziqli   tartibla n ga n   A
i
to ’ pla m   ele m e n tlaridir . Boshla n g’ich qis m iy echi m   sifatida b vektor ( ) oli n adi;   a
i
sifatida     S
i   to’pla mn i n g   e n g   kichik   ele m e n ti   oli n adi ,   u   qis m iy   yechi m     a
i   ga   olib
boradi ,   a
1  A
1  to’pla m ga tegishli.
Cheklash ,   u m u m iy  holda — A
k   to’pla mn i n g  S
k   qis m iy  to’pla m i   ( a
1 , a
2 , ... , a
k-1 )
da n   ( a
1 , a
2 , ... , a
k-1 , a
k )   gacha   qis m iy   yechi mn i   ke n gaytiruvchilar n i   ta n lovchi   yechi m
yozilishidir.   Agar   ( a
1 , a
2 , ... , a
k-1 )   qis m iy   yechi m   ya n gi   a
k   n i   ta n lash   uchu n   boshqa
i m ko n iyatlar n i ber m asa ,  u holda qaytish sodir bo’ladi va S
k-1  da n  oli n ga n   a
k-1  ya n gi
ele m e n t n i ta n lash i m ko n iyati tug’iladi. Agar   a
k-1   ya n gi ele m e n t n i ta n lash   m u m ki n
16 bo’l m asa ,  ya’ n i S
k-1  to’pla m  bo’sh bo’lsa ,  u holda ya n a bir qaytish sodir bo’ladi va
a
k-2  ya n gi ele m e n t n i ta n lashga harakat qili n adi.
Hosil   qili n ga n   ha mm a   yechi m lar n i   a n iqlovchi   qaytishli   izlash   uchu n
algorit mn i n g u m u m iy sxe m asi n i quyidagi ko’ri n ishda tasvirlash  m u m ki n :
k:=1;
Hisoblash   S
1  (* m asala n,  S
1  sifatida  A
1  n i olish  m u m ki n *);
WHILE k > 0 DO
begi n
WHILE S
k  bo’sh e m as DO
begi n (*harakatla n ish*)
a
k  sifatida S
k   n i n g e n g kichik ele m e n ti oli n adi;
IF (a
1 , a
2 , ... , a
k ) yechi n  bo’lsa
THE N  bu yechi mn i yozish;
IF k < r 
THE N  BEGI N  k:=k+1; Hisoblash   S
k  (* m asala n,  S
k   sifatida  A
k  n i olish  m u m ki n *);
          E N D;
E N D;
(*qaytish*)
k:=k-1;
E N D.
(*ha mm a yechi m lar topilga n *).
Qaytishli   izlash n i n g   u m u m iy   protsedurasi n i   qisqaroq   rekursiv   shaklda
quyidagicha yozish  m u m ki n :
PROCEDURE IZLASH (X:VEKTOR ; I:I N TEGER);
BEGI N
IF  X yechi m  bo’lsa THE N  u n i yozish;
IF I < S
THE N  BEGI N  hisoblash S
I   DO
          IZLASH (X  ||  (a) , I+I);
17          E N D;
E N D. 
Bu yerda   ||   ikki vektor n i birlashtirish operatsiyasi n i bildiradi , ya’ n i ixtiyoriy
a
1 , a
2   , ... , a
n   b
1   b
2   , ... , b
m   lar  uchu n   (a
1 , a
2   , ... , a
n   )   ||   (b
1   b
2   , ... , b
m   )=(a
1 , a
2   , ... , a
n   , b
1   b
2
, ... , b
m   )  va    ( )  ||  (a
1 )=(a
1 )  bo’ladi .
IZLASH(  ( ) ,  1)  —   n i chaqirish ha m  yechi m lar n i topadi ,  shu n i n gdek ,  ha mm a
qaytishlar   m exa n iz m da     ko’ri nm as   bo’ladi.   Quyidagi   ko’ri n ishda   tasvirla n adiga n
(quriladiga n )   izlash   daraxt n i n g   tubida n   o’tish   ata m alari n i   yozish     qaytishli   izlash
jarayo n i n i oso n lashtiradi. Izlash daraxti n i n g ildizi (0 - daraja) boshla n g’ich qis m iy
yechi m  bo’ladiga n  vektorga  m os keladi. Ba’zi p - uchlar n i n g o’g’li bo’ladiga n   k -
darajali   ixtiyoriy   k  1   uchlar   uchu n   ( a
1 , a
2 , ... , a
k-1 )   qis m iy   yechi m   m os   keladi ,
( a
1 , a
2 , ... , a
k-1 , a
k )   esa   p   -   uchga   m os   keladi ,   a
k    S
k .   Bu n da       p   -   uchlar   o’g’illari
tartibla n ga n ligi S
k   n i n g  a
k  ele m e n tlari tartibla n ga n ligiga  m os keladi. 
Daraxt tubi va ke n gligi n i ayla n ib o’tishlar. 
Ko’pgi n a   m asalalarda   ba’zi   daraxtlar n i   ( m asala n   izlash   daraxti n i)   ayla n ib
o’tiladi ,   u n i n g   har   bir   uchiga   a n iq   bir   m arta   tashrif   va   bu n da   shu   uchga   tegishli
m a’lu m otlar n i   ba’zi   tizi m li   qayta   ishlashlar   sodir   bo’ladi.   Daraxt n i n g   har   bir
uchiga   tashrif   oddiy   operatsiyalar n i   bajarish ,   m asala n :   daraxt   uchlari   belgilari n i
chop   etish   yoki   m urakkab   operatsiyalar n i   bajarish ,   m asala n :   ba’zi   fu n ksiyalar n i
hisoblash bila n  bog’liq bo’lishi  m u m ki n .
Agar   uchlarga   tashrif   orqali   daraxt   strukturasi   buzul m asa ,   daraxt   uchlaei n i
ayla n ib o’tish n i n g quyidagi ikki asosiy usuli bir qa n cha foydali hisobla n adi: tubi n i
ayla n ib o’tish va ke n gligi n i ayla n ib o’tish. 
Daraxt   tubi n i   ayla n ib   o’tishda   (xuddi   to’g’ri   tartibda   o’tish   kabi   m a’lu m )
quyidagi   rekursiv   protsedura   bila n   m oslikda   daraxt   uchlariga   tashrif   buyuriladi:
oldi n  daraxt n i n g q - ildiziga tashrif  ,  keyi n  agar ildiz qaralayotga n  daraxt n i n g bargi
bo’l m asa ,  u holda har bir q - ildiz n i n g p - o’g’li tubi n i ayla n ib o’tish protsedurasiga
m urojaat qili n adi ,   n egaki ,  ha mm a shoxlar p - ildizlar bila n  xuddi q - ildiz o’g’li p -
uch tartibidek ayla n ib o’tiladi.
18 Agar   daraxt   bo’lab   joriy   yo’l n i   saqlash   uchu n   S   -   stek n i   qo’llasak ,   ya’ n i
daraxt   ildizida n   boshla n ib ,   uchida   tugaydiga n,   berilga n   m o m e n tda   tashrif
buyuruvchi   yo’l n i   saqlash   uchu n   S-stek n i   qo’llasak ,   daraxt   tubi n i   ayla n ib
o’tish n i n g rekursiv bo’l m aga n  algorit m i n i qurish  m u m ki n :
Daraxt ildiziga tashrif va u n i S - bo’sh stekka joylashtirish;
WHILE S - stek bo’sh bo’l m agu n cha DO 
BEGI N
S - stek n i n g tepasida joylashga n  uch p bo’lsi n ;
IF p - uch o’g’li hali kel m aga n
THE N   Katta o’g’il n i p - uchga keltirish va u n i S - stekka joylashtirish;
ELSE BEGI N   p - uch n i S - stekda n  o’chirish;
IF p - uka bo’lsa
THE N  Uka n i p - uchga keltirish va u n i S - stekka joylashtirish;
E N D;
E N D.
Daraxt   ke n gligi n i   ayla n ib   o’tish ,   ba’za n   gorizo n tal   tartibda   o’tuvchi   usul
ha m   deyiladi ,   daraxt   uchlari   bo’ylab   chapda n -o’ n gga ,   daraxt   ildizlari   bo’ylab
daraja m a-daraja   m urojaat n i   a m alga   oshiradi.   Shu n day   qilib ,   uzu n ligi   n oa n iq
bo’lga n   (   r   -   m a’lu m   e m as) ,   qa n daydir   ( a
1   , a
2   , ... )   vektor   ko’ri n ishidagi     biror
yechi m i n i topish  m u m ki n .
Chuqurlik n i   ayla n ib   o’tish   algorit m i n i   shu n day   ta’riflash   kerakki ,   u n i
tasvirla n ga n   graf n i n g   ha mm a   uchlari   bo’ylab   ayla n ib   o’tishga   qo’llash   m u m ki n
bo’lsi n :
WHILE Hech bo’l m aga n da bitta uchga tashrifga ega bo’lgu n cha DO 
BEGI N   p - tashrif buyuril m aga n  uchlar n i n g biri n chisi (  m i n i m ali) bo’lsi n ;
p - uchga kelish va u n i S - stek tepasiga joylashtirish;
WHILE S - stek bo’sh e m as DO 
BEGI N   S - stek tepasida joylashga n  uch p bo’lsi n ;
IF p - uchda kel m aga n   qo’shiluvchi uchlar bo’lsi n ;
19 THE N   BEGI N   p -  n i n g qo’shilga n  uchlari lchida biri n chi tashrif buyur m aga n  uch
q - bo’lsi n ;
(p , q) reber bo’ylab yurish q - uchga tashrif va u n i s - stekka joylashtirish;
E N D;
ELSE p - uch n i S - stekda n  uchirish;
E N D;
E N D.
Algorit m   ishi   n atijasida   graf n i n g   bir-biriga   o’tga n   reberlari   bir   yoki   bir
n echta daraxt uchlariga tashrif bila n  tasvirla n adi.
Qaytishli   izlash n i   tako m illashtirish:   dasturda   qaytishli   izlash n i n g
realizatsiyasi   ha mm a   usullarda   m u m ki n   bo’lga n   yechi m lar   to’pla m i   sifatida
qaraladi.   Faqat   shu n day   ko n figuratsiyalar ,   ya’ n i   i m ko n iyatlar   so n i n i
ko’paytiradiga n   konfiguratsiyalar   tadqiq   qili n adi.   I m ko n iyatlar   to’pla m i n i
qisqartirish   uchu n   shu   turdagi   a n alizda n   foydala n ish   chegarali   izlash   yoki
shoxlar n i kesib tashlash deyiladi. 
Ikki   ko n figuratsiya n i   ekvivale n t   deb   hisoblash   m u m ki n,   agar   ularda n   biri
ayla n tirish va aksla n tirish yorda m ida boshqasiga o’tsa. Ayla n tirish va aksla n tirish
yorda m ida ularda n  ha mm a ko n figuratsiyalar to’pla m i quriladi.
Ya n a   bir   tako m illashtirish   shoxlar n i n g   qo’shilishidir.   U n i n g   g’oyasi   shu n da n
iboratki ,   bir   xil   ish n i   ikki   m arta   bajarish n i   oldi n i   olish ,   agar   ba’zi   daraxt n i n g
shoxlari n i izlash izo m orf bo’lsa ,  hech bo’l m aga n da ularda n  biri n i tadqiq qilish n i n g
iloji bo’lsa. 
Shu n i   n azarda tutish lozi m ki ,   n afaqat  dasturlar n i  qayta ishlashda ,   balki  shu
bila n   birga qayta ishla n ga n   dastur n i o’chirishda ha m   har xil tako m illashtirishlar n i
qo’llash  m aqsadga  m uvofiqdir.
1.7.   M a’lu m otlar n i ifodala n ishi n i ta n lash uchun tavsiyalar.
M a’lu m otlar   ifodala n ishi n i   ta n lash   m asala   yechilish   jarayo n i n i   m uhi m
bosqichlarida n  biridir.
20 Biri n chida n,   oli n ga n   m a’lu m ot   va   javoblar n i n g   ichki   tasvirla n ishi   i n so n
m uloqoti   uchu n   odatiydir.   Bu   i n so n   faoliyati n i   avto m atlashtirish   vositasi   sifatida
EH M   da n   kelib chiqadiga n    talab. Haqiqatda n   ha m,   agar   m a’lu m otlar n i chiqarish
uchu n , ular n i tayyorlash uchu n   m urakkab ish talab etilsa ,  u holda tashqi   n a m oish n i
n oto’g’ri   ta n la n ga n ligi n i   bildirish   kerak.   Bu n day   ishlar n i   ko’p   qis m i n i   EH Mn i n g
o’zi   bajarishi   m u m ki n .   I n so n ga   qo’yilga n   m i n i m al   talab ,   ya’ n i   m a’lu m otlar n i
tayyorlash   uchu n   oli n adiga n   m a’lu m otlar n i   n a m oishi n i   ta n lash   hisobiga   EH M da
m asala n i n g   qis m iy   yechi m i   sifatida   rejalashtirish   kerak.   Xuddi   shu n day   talablar
m asala n i n g   n atijaviy   m a’lu m otlari n i   chiqarish   uchu n   ha m   qo’yiladi.   Agar   chop
etilga n   m a’lu m ot   foydala n uvchida n   talab   etilga n   m urakkab   ish   javob
m a’lu m otlari n i   m asala n i n g   boshqa   tasvirla n ishiga   o’tkazish   bila n   bog’liq   bo’lsa,
ishlab   chiqilga n   dastur n i n g   foydaliligi   u n i n g   m i n i m u m ga   olib   kelishi   m u m ki n
bo’ladi , .
Ikki n chida n,   bu   m asala   yechi m i n i n g   sa m arali   algorit m i n i   qurish
i m ko n iyatidir.   Bu   i m ko n iyat   oli n adiga n   ichki   n a m oish   va   m asala n i n g   oraliq
m a’lu m otlari n i   ta n la n ishi   hisobiga   realizatsiya   qili n adi.   Yuqorida   aytilga n idek ,
sa m araliroq   algorit m   tuzish   uchu n   m a’lu m otlar n i n g   tashqi   n a m oishi   bila n   bir
qatorda   ya n a   unda n     m uka mm al   ichki   n amoishi   talab   etilishi   m u m ki n .   M asala n,
agar   algorit m da   m asala   yechi m ida n   kelib   chiqadiga n   qis m iy   m a’lu m otlar n i n g
qo’lla n il i shi   ko’p   qirrali   bo’lsa ,   u   holda  ular n i   faylda   saqlash   uchu n   fayl   boshiga
ko’p   m arta qaytishga va kelib chiqadiga n   m a’lu m otlar n i ko’p   m artada n    qarashga
to’g’ri  keladi.   Dastur   sa m araliroq  bo’ladi ,   agar   kelib  chiqadiga n   m a’lu m otlar n i n g
shu n day  n a m oishiga o’tkazish n i taqozo etsaki ,  agar  n atija kerakli ko m po n e n talarga
to’g’ri   m urojaat   ta’ m i n la n sa.   Ko’pgi n a   m asalarda   shu n ga   o’xshash   o’tkazishlar ,
ya’ n i ichkisida n   tashqisiga o’tkazish   m asala yechi m i n i n g sal m oqli qis m i n i tashkil
etadi ,  u n ga diqqat n i qaratish kerak.
M asala n i n g   kelib   chiqadiga n   m a’lu m otlari n i   kiritish   uchu n   tashqi   faylda n
ele m e n tlar ket m a-ketligi sifatida tayyorla n adi ,   ularda n   har biri butu n   yoki haqiqiy
so n .   Ichki    n a m oishga o’tkazish ,   ko’pi n cha ,   kiritish bila n   birgalikda olib boriladi.
21 Boshqa   hollarda ,   m a’lu m otlar n i   dastlab   oraliq   n a m oishlarga   o’tkazish   shu n i n g
bila n   ish n i   ichki   o’tkazish n i   bir   n echa   jarayo n larga   bo’lish   m aqsadga   m uvofiq
bo’ladi. 
Agar   chiqadiga n   m a’lu m otlar n i n g   tashqi   n a m oishi   i n so n   uchu n   tabiiy
ravishda   a n iqla n sa   va   m asala   yechi m i n i n g   algorit m ida n   hech   qa n day   bog’liq
bo’l m asa ,  u holda ichki  n a m oish u m u m a n  boshqacha tus oladi. Asosiy pri n sip shu n
da n   iboratki ,   algorit m   strukturasi   va   u n da   ishlatiladiga n   m a’lu m otlar n i n g
strukturasi n i   a n iqlashtirish n i n g   ketma-ket   qada m lari   bila n   bir   qatorda   ishlab
chiqilishi   kerak.   Dastur   tuzish n i n g   bu n day   qaralishi   xatoliklarga   olib   kelishi
m u m ki n . 
Algorit m   va   m a’lu m otlar strukturasi n i bir vaqtda ishlab chiqarish   n atijasida
m a’lu m otlar n i n g   abstrakt   turi   tushu n chasi   kelib   chiqadi.   Abstrakt   tur   ko n kret
turda n  farqli ravishda ko n kret tur ko n struksiyasiga bog’liq m as va faqat tur   n o m i n i
fiksirlaydi.   N atiljada   bu   turga   tegishli   qiy m atlar n i   qayta   ishlash   m u m ki n   bo’ladi.
Bu qanday dasturlash bo’lmasi n,  algorit m  ishlab chiqishi n i n g dastlabki bosqichida
dasturlash   tilidagi   ko n kret   turlar n i   fiksirlashga   hojat   yo’q.   Algorit mn i n g
boshla n g’ich   qurilishi   m a’lu m otlar n i n g   qa n daydir   abstrakt   turi   a m allari n i
qo’llaydi.
1.8. Algebraik ifodalar n i qiymatini hisoblash algoritmlari.
Algebraik   ifodalarni   qiymatini   hisoblashda   ularning   yozuvidagi   qavslardan
qutulish   va   amallar   ketma-ketligini   hisoblashda   ularning   imtiyoziga   rioya   qilish
uchun uni teskari polyakcha yozuvini (T.P.Y) hosil qilish lozim. Bunda, ochilgan
qavsni   imtiyozi   6,   unar   minus   va   pluyus   amalining   imtiyozi   5,   foydalanuvchi
funksiyasiniki  4, matematik funksiyaniki  3, ko’paytirish va bo’lshniki 2, qo’shish
va ayrishniki 1 deb qabul qilinadi.
T.P.Y   ga   o’tgan   ifodalar   qiymatini   ketma-ket   chapdan   o’nga   tomon
hisoblash   mumkin.   Mantiqiy   ifodani   T.P.Y   ga   almashtirishning   ikkita   eng   ko’p
uchraydigan usuli mavjud. 
T.P.Y. ni stekdan foydalanib hosil qilish.
22 Bizga belgili   char   turidagi  o’zgaruvchilar uchun stek kerak bo’ladi, chunki
berilgan ifoda satr ko’rinishida bo’ladi.
T.P.Y. ni hosil qilish uchun 3 xil maydon bor deb hisoblaymiz. 1-maydonga
berilgan   ifoda,   3-maydonga   natija   yoziladi,   2-maydonda   amallar   steki   hosil
qilinadi. 
1. 1-maydondagi har bir belgi navbatma-navbat tekshiriladi, agar navbatdagi belgi
son yoki o’zgaruvchi bo’lsa, u holda u 2-maydonga yoziladi.
2. Agar   belgi-amal   ishorasi   bo’lsa,   u   holda   berilgan   amal   imtiyozini   (prioritet)
tekshiramiz. 
a) Agar amallar steki bo’sh bo’lsa, yoki unda mavjud belgining imtiyozi
(unda   faqat   amal   belgilari   va   ochuchi   qavs   bo’lishi   mumkin)   joriy   belgi
imtiyozidan   kichik   imtiyozga   ega   bo’lsa,   u   holda   joriy   belgi   stekga
joylashtiriladi.
b) Agar   stek   uchidagi   belgi   joriy   belgi   imtiyozidan   katta   yoki   teng
imtiyozga   ega   bo’lsa,   u   holda   stekdan   belgilarni   3-maydonga   ushbu   shart
bajarilguncha yoziladi va a) bandga o’tiladi.
3. Agar joriy belgi-ochuvchi qavs bo’lsa, u holda uni stekga joylashtiriladi.
Agar joriy belgi-yopuvchi qavs bo’lsa, u holda stekdagi belgilar 3-maydonga
o’tkaziladi   (ya’ni   6   imtiyozli   belgi)   va   qavslar   tashlab   yuboriladi.   Agar   1-
maydonda tekshirilmagan belgi qolmasa algoritm o’z ishini tugatadi.
T.P.Y ni rekursiv tushish usuli yordamida hosil qilish.
Bu   algoritmni   bajarish   ketma-ket   bir-birini   chaqiruvchi   bir   nechta
funksiyalardan   iborat.   Bu   algoritmda   ham   berilgan   ifoda   uchun   3   ta   maydon
asosida qayta ishlanadi. Bundagi farqi shundan iboratki, algebraik ifodada ishtirok
etgan   ichma-ich   qavslar   alohida   ajaratib   olinib   oldingi   algoritmga   murojaat
qilinadi. 
T.P.Y da yozilgan ifodani hisoblash algoritmi.
23 Algebraik   ifodaning   qiymatini   hisoblash   uchun   uning   T.P.Y   sini   berilgan
satr deb hisoblab, undagi o’zgaruvchilarning qiymati uchun   stek hosil qilinadi. 
1. T.P.Y   dagi   barcha   o’zgaruvchilarga   berilgan   qiymatlar   ta’minlanadi   va
natijada kirish satrida faqat mantiqiy qiymatlar va mantiqiy amallar bo’ladi.
2. Kiruvchi   satrning   navbatdagi   belgisi   mantiqiy   qiymat   bo’lsa,   u   stekga
joylashtiriladi.
3. Agar   navbatdagi   belgi   amal   ishorasi   bo’lsa,   qiymatlar   stekining   ikkita
yuqoridagi   elementi   olinadi   va   ular   uchun   ushbu   amal   qo’llaniladi   va   stek
cho’qqisiga yoziladi. 
4. Agar kirish satrida qaralmagan belgi mavjud bo’lsa 2-qadamga qaytiladi.
Qiymatlar   stekida   hosil   bo’lgan   eng   oxirgi   qiymat   berilgan   mantiqiy
ifodaning qiymati hisoblanadi.
I-Bob bo’yicha xulosalar.
1.Matematik ifodalar tahlil qilindi;
2. Matematik ifodani qayta ishlash uchun stekdan foydalanish ko’rsatildi;
3. Ma'lumotlar tuzilmalarini tanlash asoslari bayon etildi;
4.   Turli   xil   ma’lumotlar   strukturasidan   foydalanib   algebraic   ifodalarni   infiks
yozuvdan postfix yozuvga o’tkazish algoritmlari berildi;
5. Algebraik ifodalarni hisoblash algoritmi berildi.
24 2-BOB. FORMULANI POSTFIKS YOZUVIGA O’TKAZISH
DASTURINING TARKIBIY QISIMLARI.
2.1. Jarayonni tahlil qilish va algoritmini ishlab chiqish bosqichlari.
      Algoritm   ishlab   chiqish   masalalar   tuzishni   tadbiq   etadi.   Shuning   uchun,
odatdagidek, bunday hollarda (masalan, uchun geometrik muammolarni hal qilish
tuzish usulini eslab qolishingiz mumkin), muammolarni tahlil qilish bosqichi zarur.
Bu   kelajakdagi   algoritmning  kirish   va   chiqishi   nima   ekanligini   aniqlashga,   kirish
va   chiqish   ob'ektlari   va   ularning   tarkibiy   qismlari   o‘rtasidagi   asosiy   zaruriy
munosabatlarni   ajratib   ko‘rsatishga,   muammoni   hal   qilish   uchun   erishish   kerak
bo‘lgan   kichik   maqsadlarni   ajratib   ko‘rsatishga   va   natijada   algoritmni   ishlab
chiqishga   imkon   beradi.   algoritm   yaratishga   yondashuv.   Ushbu   bosqichning
natijasi   algoritmning   spetsifikatsiyasi   bo‘lishi   kerak,   ya'ni.   kirish   ma'lumotlarini
chiqishda   qayta   ishlash   uchun   algoritm   nima   qilishi   kerakligi   (tanlangan
yondashuv doirasida) eng umumiy shakldagi bayonot.
     Qoida tariqasida,  muammolarni   shakllantirishda   ishlov   beriladigan   kirish
ma'lumotlarining   hajmiga   cheklovlar   yo‘q   .   Shu   bilan   birga,   dastur   va   uning
ma'lumotlarini saqlash uchun mavjud bo‘lgan xotira hajmi bo‘yicha ham, dasturni
hisoblash vaqti bo‘yicha ham hisoblash tizimining resurslari cheksiz emasligi aniq.
Shuning uchun, algoritmning spetsifikatsiyasini, albatta, ishlab chiqilgan algoritm
tomonidan qayta ishlanishi kerak bo‘lgan kirish ma'lumotlarining sinfi uchun aniq
tasvirlanmagan bo‘lsa (cheklovlar tizimi orqali) to‘liq deb hisoblash mumkin emas.
Misol   uchun,   agar   matnlar   qayta   ishlanayotgan   bo‘lsa,   u   holda   kiritilgan
ma'lumotlar   sinfining   aniq   tavsifi,   matn   strukturasining   aniq   tavsifidan   tashqari,
kirish matnining maksimal ruxsat etilgan uzunligi; agar matritsalar qayta ishlansa,
unda   bunday   tavsif   bir   juft   raqamlarni   o‘z   ichiga   olishi   kerak:   maksimal   ruxsat
etilgan qatorlar  soni  va matritsadagi  maksimal  ruxsat  etilgan ustunlar soni  va r.p.
Shunday   qilib,   iloji   boricha   eng   universal   dasturni   ishlab   chiqish)   doirasida.
kompyuterda topshiriqni bajarish uchun talabaga ajratilgan hisoblash resurslari.
25       Algoritmni   ishlab   chiqish   (shuningdek,   uni   asoslash   va   agar   kerak   bo‘lsa,
o‘zgartirish)   agar   ishlab   chiquvchi   boshidanoq   rivojlanishning   har   bir   bosqichida
zarur   bo‘lgan   kichik   maqsadlarni   aniq   belgilash   va   harakatlarning   borishini
kuzatish   imkonini   beradigan   biron   bir   intizomga   rioya   qilmasa,   sezilarli   darajada
murakkablashadi.   ular   orasidagi   munosabat.   Keyingi   yillarda   keng   tarqalgan   ana
shunday   usullardan   biri   bosqichma-bosqich   rivojlanish   usulidir.   Bu   usulning
mohiyati   shundan   iboratki,   algoritm   muammoni   tahlil   qilish   natijasida   olingan
spetsifikatsiyadan   boshlab  “yuqoridan  pastga”  ishlab  chiqiladi.  Har  bir  bosqichda
oz   sonli   qarorlar   qabul   qilinadi,   bu   esa   algoritmning   boshqaruv   va   axborot
tuzilmasini bosqichma-bosqich takomillashtirishga (takomillashtirish ) olib keladi.
Shunday qilib, dasturning yakuniy versiyasiga yaqinlashib, tobora batafsil algoritm
spetsifikatsiyalari ketma-ketligi olinadi.
      Ushbu   yondashuv   algoritmni   qismlarga   (modullarga)   bo‘lish   imkonini
beradi, ularning har biri mustaqil (odatda kichik) kichik muammoni hal qiladi. Bu
alohida   protsedura   yoki   funktsiya   sifatida   amalga   oshirilgan   kichik   vazifani   hal
qilishga   harakat   qilish   imkonini   beradi.   Modullar   orasidagi   boshqaruv   aloqalari
ularga   tegishli   qo‘ng‘iroqlar   (qo‘ng‘iroqlar)   orqali   amalga   oshiriladi   va
ma'lumotlar   parametrlar   va   global   o‘zgaruvchilar   orqali   bir   moduldan   ikkinchi
modulga uzatiladi.
      Kichik bir misol bilan bosqichma-bosqich rivojlanish usulini ko‘rib chiqing.
     Bosqichma-bosqich   ishlab   chiqish   usulini   qo‘llash   bilan   bir   qatorda,   ishlab
chiqilayotgan   algoritmga   sezilarli   ta'sir   ko‘rsatishi   mumkin   bo‘lgan   quyidagi
omillarni ham yodda tutish kerak.
     1)   Algoritm   dasturlashtiriladigan   til   tomonidan   taqdim   etilgan   vositalar.
Masalan,  Paskalda  rekursiv  protseduralarga ruxsat  berilgan, ammo ular  Fortranda
emas. Shunday qilib, turli tillardan foydalanganda, sezilarli darajada farq qiladigan
algoritmlarni ishlab chiqish mumkin.
26     2)   Algoritm   yo‘naltirilgan   ma'lumotlarning   tuzilishi.   Bu   omil   ishlab
chiqilgan algoritm samaradorligiga juda katta ta'sir ko‘rsatadi. Bu haqda II qismda
batafsilroq muhokama qilinadi.
     3)   Kompyuter   xotirasida   haqiqiy   sonlarning   taqribiy   tasviri.   Bu   algoritmni
ishlab   chiqishda,   haqiqiy   qiymatlar   solishtirilmagan   joyda,   dasturchi   tomonidan
belgilangan   aniqlik   darajasidan   foydalanishni   talab   qiladi.   Mashina
arifmetikasining   o‘ziga   xos   xususiyatlarini   e'tiborsiz   qoldirish   algoritmni   ishlab
chiqishda   o‘quvchilarning   keng   tarqalgan   xatosidir.   Masalan,   uchta   nuqta   bitta
to‘g‘ri   chiziqda   yotgan   yoki   yo‘qligini   tekshirib,   talaba   odatda   quyidagi   dasturni
tuzadi:   ikki   nuqtadan   o‘tadigan   to‘g‘ri   chiziq   tenglamasiga   uchinchi   nuqtaning
koordinatalarini   almashtiradi.   Barcha   nuqtalar   bir   xil   chiziqda   yotadi,   agar   natija
nolga   teng   bo‘lsa.   Biroq,   mashina   arifmetikasining   noto‘g‘riligi   sababli,
kompyuterda   bunday   tekshirish   amalga   oshirilganda,   nazariy   jihatdan   nomlangan
xususiyat   qondirilsa   ham,   nol   deyarli   hech   qachon   olinmaydi.   Aslida,   agar
almashtirish  natijasida   olingan  modul   natijasi  ishlab   chiquvchi   tomonidan  taqdim
etilgan   raqamdan   kam   bo‘lsa,   biz   mulkni   bajarilgan   deb   hisoblashimiz   kerak,
masalan
2.2. Tanlangan algoritmni va uning testlar to‘plamini asoslanishi.
Algoritmning   to‘g‘riligini   qat'iy   matematik   isbotlash   odatda   juda   qiyin   ish
bo‘lib,   asosan   tsikllar   va   rekursiv   protseduralarning   to‘g‘riligini   isbotlash   qiyin.
Shu   bilan   birga,   ma'lum   testlar   to‘plamida   algoritmlarning   to‘g‘ri   ishlashini
namoyish   qilish   uning   har   doim   to‘g‘ri   ishlashini   anglatmaydi,   qoida   tariqasida
cheksiz (yoki deyarli cheksiz) juda ko‘p turli xil kombinatsiyalar mavjudligini esga
olish kerak. kiritilgan ma'lumotlardan. Shuning uchun, algoritmga ba'zi bir asoslar
bilan   birga   borish   kerak,   bu   hatto   qat'iy   isbot   bo‘lmasa   ham,   algoritmning
to‘g‘riligiga   bizni   to‘liq   ishontiradi.   Albatta,   bu,   masalan,   uslubda   mulohaza
yuritmaslik kerak:  algoritm barcha variantlardan o‘tadi, shuning uchun u to‘g‘ri";
chunki   keyin   savol   tug‘iladi,   qanday   qilib   algoritm   haqiqatan   ham   barcha
variantlardan o‘tishiga ishonch hosil qilish kerak.
27   Ehtimol,   algoritmni   oqlashning   eng   yaxshi   real   yondashuvi   §   3.2   da
tasvirlangan   bosqichma-bosqich   ishlab   chiqish   usulidan   foydalangan   holda   uni
"qurilishi   bo‘yicha"   asoslashdir.   To‘g‘ri   algoritmni   olish   uchun   bunday   qurilish
jarayonida uning bosqichlarini tafsilotlashning to‘g‘riligini kuzatish kerak. Ammo
bu allaqachon ancha sodda vazifadir: qoida tariqasida, qadamning tafsilotlari nima
qilish kerakligi ta'rifiga muvofiq amalga oshiriladi.
Ushbu   yondashuv   bilan   algoritmni   qurish   va   uni   asoslash   bir-biri   bilan
chambarchas   bog‘liq.   Shu   bilan   birga,   shuni   tushunish   kerakki,   agar   muammoni
tahlil  qilish  bosqichida  uni  hal  qilishda  noto‘g‘ri  yondashuv  tanlangan  bo‘lsa,  asl
spetsifikatsiyaning   keyingi   eng   aniq   tafsiloti   ham   endi   to‘g‘ri   algoritmni   olishga
imkon bermaydi.
Algoritm   va   dasturni   ishlab   chiqish   testlar   majmuasini   qurish   bilan
chambarchas bog‘liq bo‘lib, ular bo‘yicha dasturning ishlashi uni tuzatish paytida
tekshiriladi.   Dastur   va   testlar   majmuasini   birgalikda   ishlab   chiqishda   ushbu
to‘plamning   to‘liqligiga   erishish   osonroq   bo‘ladi,   ya'ni   dasturdagi   har   bir   o‘tish
to‘plamning testlaridan birida o‘tishi mumkin.
Darhol   shuni   ta'kidlaymizki,   test   nafaqat   dastur   uchun   kiritilgan
ma'lumotlarning   ma'lum   bir   to‘plami,   balki   dastur   ushbu   ma'lumotlar   bo‘yicha
ishlab chiqarishi kerak bo‘lgan barcha natijalarning aniq tavsifi bo‘lib, unda ushbu
natijalar chiqishda joylashgan bo‘lishi kerak. . Tabiiyki, "natija" tushunchasi uning
ishonchliligini   oshirish   uchun   dasturga   joylashtirilgan   bosma   operatorlar
tomonidan   chop   etilishi   kerak   bo‘lgan   xabarlarni   ham   o‘z   ichiga   oladi.   Ushbu
talabning   buzilishi   tanlangan   ma'lumotlar   bo‘yicha   dasturning   to‘g‘riligini
baholash   imkonsiz   bo‘lishiga   olib   keladi.   Misol   uchun,   agar   N   natural   sonining
birlamchilik   xususiyatlarini   tekshiradigan   dastur   haqida   gapiradigan   bo‘lsak
(quyidagi   misolga   qarang),   agar   oldindan   ma'lum   bo‘lmasa,   uni   N   =   1   234   567
uchun sinab ko‘rishning ma'nosi yo‘q. bu son tub yoki kompozitdir.
Odatda,   muammoni   shakllantirishdan   kelib   chiqadiki,   dastur   kamida   ikkita
testda sinovdan o‘tkazilishi kerak. Masalan, masalada har biri berilgan to‘plamdan
28 kamida uchta turli nuqtadan o‘tadigan, kamida uchta nuqta bo‘lgan doiralar sonini
hisoblash   talab   qilinsin.   Keyin,   test   sifatida,   aniq   bir   to‘g‘ri   chiziqda   yotadigan
nuqtalar   to‘plamini   (kerakli   doiralar   yo‘qligi   haqida   kutilgan   xabar   bilan)   va
barcha nuqtalar bitta to‘g‘ri chiziqda yotmaydigan to‘plamni olish kerak. bu holda,
test   javobni   o‘z   ichiga   olishi   kerak   -   §   3.2   da   aytib   o‘tilgan   hisob-kitoblarning
yaqinlashishini hisobga olgan holda dastur qancha kerakli doiralarni topish kerak).
Bundan tashqari, muammoni hal qilish algoritmida har doim. dallanish sodir
bo‘lsa, testlar to‘plamini har bir shoxchadan o‘tish imkoniyatiga ega bo‘lish uchun
to‘ldirish   kerak.   Xuddi   shunday,   agar   davom   etish   shartiga   ega   bo‘lgan   sikl
operatori   uchrasa,   u   holda   test   majmuasida   tsikl   tanasi   hech   qachon
bajarilmaydigan   test,   shuningdek,   tsikl   tanasi   kamida   bir   marta   bajariladigan   test
bo‘lishi kerak.
Keling, oddiy misol bilan test to‘plamini qurishni ko‘rsatamiz.
2.3. Ishlab chiqilgan algoritmlar va ma’lumotlar tuzilmasini tavsiflash.
Avvalo,   shuni   yodda   tutish   kerakki,   bunday   tavsif   mashina   uchun   emas,
balki   inson   uchun   mo‘ljallangan.   Boshqacha   qilib   aytganda,   biz   dastur   haqida
emas,   balki   ishlab   chiqilgan   algoritmning   umumiy   tuzilishi,   uning   individual
bosqichlarining   ma'nosi   va   ularning   ma'nosi   haqida   tasavvurga   ega   bo‘lgan   ba'zi
matn   (ya'ni   og‘zaki   tavsif)   haqida   gapiramiz.   mantiqiy   munosabat.   Algoritm
tavsifining   etarlicha   yuqori   darajasini   saqlab   turish   ham   uni   asoslashni
osonlashtiradi.   Shuning   uchun   algoritmning   bosqichlari   muammoni   tuzishda
muhokama qilinadigan ob'ektlar va ular o‘rtasidagi munosabatlar nuqtai nazaridan
tavsiflanishi   kerak.   Masalan,   "   geometrik   Berilgan   masala   uchun   algoritm
qadamlarini   nuqtalar,   chiziqlar   va   hokazolar   ustida   amallar,   uchta   nuqtaning   bir
chiziqqa   tegishliligi   va   hokazo   kabi   xususiyatlarni   sinovdan   o‘tkazish   sifatida
tasvirlash   kerak.   Lekin   kodlar   bilan   ish   bo‘lmasligi   kerak.   bu   ob'ektlar,   masalan,
ba'zi bir to‘plam nuqtalarining koordinatalari matritsasi bilan.
Bu,   albatta,   matematik   va   boshqa   qulay   belgilardan   foydalanishga
to‘sqinlik   qilmaydi.   Bundan   tashqari,   qadamlar,   masalan,   dasturlash   tillarining
29 konstruktsiyalariga   o‘xshash   shaklda   yozilsa,   algoritm   tuzilishi   aniqroq   bo‘ladi.
loop   bayonotlari   va   shartli   bayonotlar   (misol   hisoboti   uchun   quyida   ko‘ring,
shuningdek,   bosqichma-bosqich   ishlab   chiqish   usulini   ko‘rsatish   uchun   §   3.2   da
keltirilgan misol).
Algoritm   tomonidan   qayta   ishlanadigan   ma'lumotlar   kirishlarga   bo‘linadi.
oraliq   nazorat   va   dam   olish   kunlari.   Kirish   va   chiqish   ma'lumotlarining   o‘ziga
xosligi   shundaki,   ular   bilan   nafaqat   algoritm,   balki   dastur   foydalanuvchisi   ham
shug‘ullanadi. Shuning uchun bunday ma'lumotlarni taqdim etishning ikkita shakli
ajralib turadi: tashqi va ichki. -
Tashqi   ko‘rinishga   qo‘yiladigan   asosiy   talab   uning   foydalanuvchi   uchun
maksimal   qulayligi,   tushunarliligi   va   tabiiyligi   bo‘lib,   u   osonlik   bilan
ma'lumotlarni  kiritish uchun tayyorlay oladi  va natijani  chiqishdan baholay oladi.
Misol   uchun,   agar   tekislikdagi   ba'zi   nuqtalar   to‘plami   kirish   ma'lumotlari
vazifasini   bajarsa,   u   holda   tashqi   tasvir   raqamlar   ketma-ketligiga   o‘xshab   ketishi
mumkin   -   bu   nuqtalarning   koordinatalari;   bu   holda   birinchi   nuqtaning
koordinatalari   avval,   keyin   ikkinchi   va   hokazo   borishi   tabiiydir.   Va   aksincha,   bu
ketma-ketlikda   barcha   abscissalar   birinchi   bo‘lib   borishini,   keyin   esa   barcha
ordinatalarni   yoki   shunday   bo‘lishini   talab   qilish   g‘ayritabiiydir.   yuqori   yarim
tekislikdagi nuqtalarning koordinatalari birinchi bo‘lib, shundan keyingina pastdan
kelishi   kerak.   Bu   foydalanuvchidan   manba   ma'lumotlarini   ushbu   talablarga
muvofiq tartibga solish uchun juda ko‘p dastlabki ishlarni bajarishni talab qiladi.
Xuddi shu tarzda, olingan ma'lumotlarning bunday xulosasi qabul qilinishi
mumkin emas, bu esa foydalanuvchidan bosilgan ma'lumotlarni muammoning asl
bayonoti tushunchalariga tarjima qilish uchun ahamiyatsiz bo‘lmagan harakatlarni
talab qiladi. Qog‘ozda chop etilgan ma'lumotlarni mazmunli guruhlash haqida ham
eslash kerak - shunday qilib, aytaylik, matritsani olishda uning elementlari uzluksiz
ketma-ketlik shaklida emas, balki qatorlar bo‘yicha joylashtiriladi.
30 2.4. Dastur uchun asosiy talablar.
Ushbu ishning bir qismi sifatida arifmetik ifodalarni tahlil qiluvchi dasturni
ishlab  chiqish  kerak. Tahlil  jarayonini  samarali  tashkil  etish  va  qoniqarli   natijaga
erishish uchun dasturga quyidagi talablar belgilandi:
1.   Dastur   oddiy   matematik   tilda   taqdim   etilgan   arifmetik   ifoda   qatori
ko'rinishidagi kirish ma'lumotlarini olishi kerak (infiks belgisi).
2. Dastur kiritish arifmetik amallarning ustuvorligini ajrata olishi kerak.
3.   Dastur   bir   nechta   matematik   amallarni   o'z   ichiga   olgan   murakkab
ifodalarni hisoblay olishi kerak.
4. Dastur kiritilgan matematik ifoda natijasini hisoblashi kerak.
5.   Dastur   foydalanuvchiga   o'zi   bajaradigan   matematik   amallarning
bosqichlarini va bu hisob-kitoblarning oraliq natijalarini ko'rsatishi kerak.
6. Dastur Windows OS ostida ishlashi kerak.
2.5. Ma’lumotlarni kiritish tilining tavsifi.
Dastur   kirish   ma'lumotlarining   quyidagi   tuzilmasiga   muvofiq   ishlab
chiqilgan:
Kirish   ma'lumotlari   operandlar   va   amallarni   o'z   ichiga   olgan   matematik
ifoda bo'lib, belgilar ketma-ketligi sifatida qabul qilinadi.
Matemati ifoda amallarining to‘plami 2.1- jadvalda keltirilgan:
31 2. 1 -jadval. Ifoda tuzilmasi.
№ Dasturda
belgilash Matematik
belgilar Funksiya Foydalanish
qoida(shart)lari
1. 1 + + Qo‘shish Operatorning   o'ng   va
chap   tomoniga   ikkita
operandni qo'shadi.
2. 2 - - Ayirish Operatorning o'ng
tomonidagi operandning
chap tomonidagi
operanddan ayiradi
3.  * * Ko‘paytirish Operatorning o'ng va
chap tomonida
joylashgan ikkita
operandni ko'paytiradi.
4.  / : Bo‘lish  Operatorning chap
tomonidagi operandni
operatorning o'ng
tomonidagi operandga
bo‘ladi.
5.  ^ Daraja
asosi Daraja Chap tomondagi
joylashgan operandi
o`ng tomonda
joylashgan operand
darajasiga ko`taradi
Operandlarni   tashkil   etuvchi   kirish   tili   belgilari   to'plami   quyidagi   jadvalda
ko'rsatilgan:
Jadval 2.2. Kirish tili belgilari.
32 № Dasturda belgilash Matematik belgilar Nomlanishi
1. 1 1 Bir
2. 2 2 Ikki
3. 3 3 Uch
4. 4 4 To‘rt
5. 5 5 Besh
6. 6 6 Olti
7. 7 7 Yetti
8. 8 8 Sakkiz
9. 9 9 To‘qqiz
10. 0 0 Nol
11. Lotincha harflar Operandlar a…z 
2. 6 . Chiqish ma'lumotlarining tavsifi.
Dasturning chiqishi quyidagi ma'lumotlardan iborat:
a) Daraxtni tahlil qilish.
b) Oraliq hisoblar natijalari.
c) Yakuniy natija.
Tahlil   daraxti   -   bu   daraxt   tuzilishini   jadval   ko'rinishida   ko'rsatish;   ota-ona
shoxlarini kichik shoxlar bilan bog'lash uchun maxsus havola turi ishlatiladi.
Oraliq   hisoblar   natijalari   tahlil   daraxtining   bir   tugunida   bajariladigan
ibtidoiy matematik amallarning natijalaridir.
Yakuniy   natija   barcha   amallarning   yig'indisidir   va   arifmetik   ifodani
baholash natijasidir.
33 2.7. Dasturning algoritmik jihatlari.
Dastur algoritmi 2 ta algoritm bog‘lanishidan iborat:
 Tahlil daraxtini qurish;
 Ifodani polyakcha prefiks yozish tamoyili asosida qurish.
Birinchi   algoritm-bu   ustunlikning   kirish   ifodasida   ishlatiladigan   ustunlikning
farqi   printsipiga   ko'ra,   jadval   shaklida   taqdim   etilgan   daraxtning   qurilishi.
Operandlarning ustuvor yo'nalishlari 2.3- jadvalda ko'rsatilgan.
№ Operand Nomlanishi Bajarish ustuvorligi
1. + Qo‘shish 1
2. - Ayirish 1
3. * Ko‘paytirish 2
4. / Bo‘lish 2
5. ^ Daraja 3
Bundan   tashqari,   til   to'plamiga   har   ikki   tomonda   tirnoq   belgilari   bilan
ko'rsatilgan   raqamni   ifodalovchi   yangi   operand   kiritiladi.   Bu   operator   ifodaga
havolani   bildiradi   va   berilgan   ifodani   baholash   natijasini   ramziy   qiladi.   Bu
operator   algoritmning   ikkinchi   qismida   ifodani   polyakcha   prefiks   belgisi   sifatida
yozishda operator sifatida ishlatiladi.
Masalani yechish algoritmining tavsifi.
Dasturning   asosiy   algoritmi   1   bobdagi   1.4   va   1.5.bandda   tasvirlangan.   Bu
yerda push va pop funksiyalarining ishini batafsil ko'rib chiqmoqchiman.
Push  funktsiyasi.
Push   funksiyasi   stekga   element   qo'shadi.   Stekga   element   qo‘shganda
element   yaratish   (2.1-rasm)   va   uning   axborot   qismini   to‘ldirishdan   tashqari   (2.2-
34 rasm)   uni   oldingi   element   bilan   bog‘lash   (2.3-rasm)   va   ko‘rsatgichni   yuqori
qismiga yangilash talab qilinadi. stek (2.4-rasm).
2.1-rasm. Element yaratish
2.2-rasm. Ma'lumot qismini to'ldirish.
2.3-rasm. Elementni oldingi element bilan bog‘lash.
35 2.4-rasm. Ko'rsatkichni stekning yuqori qismiga yangilash
Pop  funktsiyasi.
Pop   funksiyasi   stekdan   elementni   chiqaradi.   Stekdan   elementni   olish
elementning   axborot   qismini   olishdan   iborat   (2.5-rasm),   kursorni   stekning   yuqori
qismiga   keyingi   elementga   o'tkazish   (2.6-rasm)   va   element   ostidan   xotirani
bo'shatish (2.6-rasm).
2.5-rasm. Elementning axborot qismini olish.
2.6-rasm. Ko'rsatkichni stekning yuqori qismiga keyingi elementga o'tkazish.
36 2.7-rasm. Xotirani pastki elementdan ozod qilish.
37 Boshlash
Bor  ‘ > ’
Operand qismiini 
oldingi belgisi ?
Operandlarni 
pastga to‘playmiz
Operand 
 
qismining keyingi 
belgisi 
      ?
Operandlarni 
yuqoriga to‘playmiz
Perfiks shaklidagi 
ifodaning
generatsiyas
i ha
yo‘q
1 Bor  ‘
* ’
Operand qismini 
oldingi qismi    ?
Operandlarni 
pastga to‘laymiz
Operand 
 
qismining keyingi 
belgisi ?
Operandlarni 
yuqoriga to‘playmiz 
Perfiks shaklidagi 
ifodaning 
generatsiyasi  да 1
2 yo‘q2.5 Dasturning blok sxemasi
Dasturning blok-sxemasi quyidagicha ifodalanadi:
2.8-rasm - Dasturning blok sxemasi.
38 Ha  ‘ / ’
   Ha 2
3 Yo ‘q Ha  ‘ + ’
Ha 3
4 Yo ‘q
Perfiks shaklidagi 
ifodaning 
generatsiyasi Operand 
qismining 
oldingi belgisi  ?
Operandlarni 
pastga 
to‘playmiz Operand 
qismining 
oldingi belgisi  ?
Operandlarni pastga 
to‘playmiz
Operand 
qismining 
keying belgisi  ? Operand 
qismining 
keying belgisi  ?
Perfiks shaklidagi 
ifodaning 
generatsiyasiOperandlarni 
yuqoriga 
to‘playmiz Operandlarni 
yuqoriga 
to‘playmiz
 
2.9-rasm - Dasturning blok sxemasi.
 
 
39 Ha  ‘ / ’
   Ha 4
5 Yo ‘q Ha  ‘ + ’
Ha 5
6 Yo ‘q
Perfiks shaklidagi 
ifodaning 
generatsiyasi Operand 
qismining 
oldingi belgisi  ?
Operandlarni 
pastga 
to‘playmiz Operand 
qismining 
oldingi belgisi  ?
Operandlarni pastga 
to‘playmiz
Operand 
qismining 
keying belgisi  ? Operand 
qismining 
keying belgisi  ?
Perfiks shaklidagi 
ifodaning 
generatsiyasiOperandlarni 
yuqoriga 
to‘playmiz Operandlarni 
yuqoriga 
to‘playmiz
2.10-rasm - Dasturning blok sxemasi.
 
40 6
Ro‘yxat bo‘yicha
Ro‘yxat 
tayyorlash
Ro‘yxat bo‘yicha
Agar element 
bo‘sh bo‘lmasa
Perfiksni 
tanlash Hа
Perfiks  ‘ ^ ’
107
9Yo ‘q
8 11Perfiks  *Perfiks  / 
Perfiks  + Perfiks  -
12
 
2.11-rasm - Dasturning blok diagrammasi.
41          Son olishHavola Son12
     Son olishHavola Son
13 Son  olishHavola Son8
       Son olish Havola Son
 
14Perfiksni 
o‘chirish
Operand 
nima ?
Havola bo‘yicha 
qiymat olish Perfiksni 
o‘chirish
Operand 
nima ?
Havola bo‘yicha 
qiymat olish
   Operand 
nima ?
Havola bo‘yicha 
qiymat olish    Operand 
nima ?
Havola bo‘yicha 
qiymat olish
^ amalini         
bajarish * amalni 
bajarish
Xulosa
Xulosa
 
 
2.12-rasm - Dasturning blok sxemasi.
42          Son olishHavola Son12
     Son olishHavola Son
13 Son  olishHavola Son8
       Son olish Havola Son
 
14Perfiksni 
o‘chirish
Operand 
nima ?
Havola bo‘yicha 
qiymat olish Perfiksni 
o‘chirish
Operand 
nima ?
Havola bo‘yicha 
qiymat olish
   Operand 
nima ?
Havola bo‘yicha 
qiymat olish    Operand 
nima ?
Havola bo‘yicha 
qiymat olish
/ amalini         
bajarish + amalni 
bajarish
Xulosa
Xulosa
 
 
2.13-rasm - Dasturning blok sxemasi.
43 Olingan sonHavola Son11
          Son olishHavola Son
 
17 7
171614
1513
КонецPerfiksni 
o‘chirish
Operand 1 
nima ?
Havola bo‘yicha 
qiymat olish
Operand 2 
nima ?
Havola bo‘yicha 
qiymat olish
+ amalini         
bajarish
Xulosa Oxirgi xulosa
 
2.14-rasm - Dasturning blok sxemasi.
44 II-Bob bo’yicha xulosalar:
Murakkab algebraik formulani postfiks yozuviga o’tkazish dasturi uchun:
 Dastur uchun asosiy talablar;
 Kiritish tilining tavsifi;
 Chiqish ma'lumotlarining tavsifi;
 Dasturning algoritmik jihatlari;
 Dasturning blok-sxemasi berildi.
45 III-BOB.  MATEMATIK FORMULALARNI HISOBLASH JARAYONINI
AMALGA OSHIRISH DASTURINING TAVSIFI
Ushbu bobda matematik ifodalarni hisoblash jarayonini tahlil qilsih, maxsus
yozuv ko’rinishga o’tkazish va uni berilgan qiymatlar asosida  hisoblashni  amalga
oshirish dasturining tavsifi ko‘rsatilgan.
3.1 Bekusa Naura shakli (BNSH)
BNSH - bu sintaktik birliklarni tavsiflashning rasmiy usuli bo'lib, unda ular
boshqa birliklar yoki elementar belgilar orqali aniqlanadi.
Iboralarni   tahlil   qilishning   ba'zi   vazifalarida   shartning   bir   qismi   BNSH
shaklida   taqdim   etilishi   mumkin,   shuning   uchun   quyidagi   tavsifning   ba'zi
sharhlarni va misollarni keltiramiz.
<raqam>::='0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'
Sintaktik birliklarning nomlari burchak qavslarida joylashgan. Ismdan keyin
quyidagi   belgi::   =   ("bu"   yoki   "ta'rifi   bo'yicha"   deb   o'qiladi),   keyin   bu   birlikning
tavsifi.   Yuqoridagi   misolda   "raqam"   deb   nomlangan   birlik   mavjud   bo'lib,   u
quyidagi belgilardan biri bo'lishi mumkin. 
"/" belgisi "yoki " degan ma'noni anglatadi.
<belgisiz_raqam>:: = <raqam > {<raqam>}
Figurali   qavs   ichida   bir   parcha   yoziladi,   u   bir   necha   marta   takrorlanishi
mumkin   (lekin   majbur   emas).   Ushbu   tavsif   shuni   anglatadiki,   belgisiz   raqam   har
qanday   sonda   boshqa   raqamlar   kuzatishi   mumkin   bo'lgan   (yoki   bo'lmasligi
mumkin) raqam bilan boshlanadi.
<belgisi>::='+'|'-'; <belgili_raqam_>::= < belgi> < belgisiz_raqam>
Ikki   yoki   undan   ortiq   sintaktik   birliklarni   ketma-ket   eslatish   shuni
ko'rsatadiki,   kattaroq   birlik   BNSH-da   tasvirlanganidek   aniq   tartibda   yuradigan
kichik birliklardan iborat. Shunday qilib, misolda "belgi bilan raqam" ko'rsatilishi
kerak bo'lgan bitta belgi bilan boshlanadi, undan keyin belgisiz raqam.
<plyus>::= ' + ' < miqdor>:: = <raqam > {<plyus><raqam>}
46 Miqdor   kamida   bitta   raqamdan   iborat   bo'lib,   undan   keyin   ixtiyoriy   (shu
jumladan   nol)   qo'shimcha   belgilar   soni   kuzatilishi   mumkin,   ularning   har   biridan
keyin raqam bo'lishi kerak.
Ba'zi sintaktik birlik shunga o'xshash, ammo qisqaroqligi bilan aniqlanganda
rekursiv tavsiflar ham mumkin.
<to'g'ri va mos keladigan>::="()"|'('<to'g'ri qavslar ketma-ketligi>')| / <to'g'ri
qavs
 ketma-ketlik > {<to'g'ri qavs ketma-ketligi>}
Arifmetik   ifodalarni   tavsiflashda   rekursiya   joylashtirish   imkoniyatini
anglatadi,   ya'ni   ifodalarda   parantezda   o'ralgan   pastki   ifodalarning   operandlari
sifatida foydalanish. Dasturlash tillarining sintaksisi  odatda Backus-Naur (BNSH)
shakli   deb   nomlangan   rekursiv   yozuv   yordamida   tavsiflanadi.   Bu   boshqa
nonerminal   yoki   terminal   belgisi   (ya'ni,   oydinlik   talab   qilmaydigan   belgi)   bilan
almashtirilishi   mumkin   (ya'ni,   aniqlashtirishni   talab   qilmaydigan   ramz)   sifatida
belgilangan   almashtirish   qoidalaridan   iborat.   Almashtirish   qoidalari   muqobil
almashtirishlarni   ajratish   uchun   "|"   belgisidan   foydalanadi.   Nonerminal   belgilar
"<>"burchak qavslarida joylashgan. Belgi":: = "" bu " degan ma'noni anglatadi.
BNSH yordamida eng oddiy arifmetik ifodani aniqlash quyidagicha:
<arifmetik ifoda>:: = < operand> < operatsiya belgisi > < operand>
<operand>:: = < ID > / (<arifmetik ifoda>)
<operatsiya belgisi> :: = + | - | * | /
<ID> :: = a | b | ...| z | a | B | ... / Z
Ushbu   qoidalar   arifmetik   ifoda   operatsiya   belgisi   bilan   ajratilgan   ikkita
operanddan   iboratligini   ko'rsatadi.   O'z   navbatida,   har   qanday   operand   bitta   harfli
identifikator   yoki   parantez   bilan   qoplangan   arifmetik   ifoda   bo'lishi   mumkin.   Bu
shuni anglatadiki, arifmetik ifoda o'zi nuqtai nazaridan aniqlanadi, shuning uchun
bu ta'rif rekursivdir.
47 3.2 Arifmetik ifodalarni tahlil qilish va hisoblash algoritmida ishlatiladigan
texnologiya.
Algoritm arifmetik ifoda analizatori hisoblanib keyinchalik uning qiymatini
hisoblash imkoniyatinii beradigan dasturiy ta'minotni ko'rib chiqaiz.
Ushbu sinfdagi dasturlarni "tanib oluvchilar" dastur deb ham ataladi.
Bu   algoritm   berlgan   arifmetik   ifodasini   oddiy   tarkibiy   qismlarga   ajratish
jarayoniga asoslangan.
Algoritmning   dastlabki   natijasi-leksemalar   daraxti   shakllantirish   bo’ladi.
Leksemalar   drganda   biz   qo'shimcha   tarkibiy   qismlarga   bo'linmaydigan   arifmetik
ifoda qismlarini tushunamiz.
Tanib   olish   algoritmining   tavsifi   dasturlash   tiliga   bo’gliq     ulanmasdan
beriladi.
Quyidagi   (x+10.2)^2+5*y-z   arifmetik   ifodani   algoritm   arifmetik   ifodaning
grammatikasi nuqtai nazaridan to'g'ri deb hisoblaydi, chunki:
 Ochiligan qavslar soni yopilgan qavslar soniga teng.
 Sonning butun qismi nuqta bilan ajratilgan.
 Arifmetik ifoda satrida faqat ruxsat etilgan belgilar mavjud: 0...9 raqamlar, +
-*/^   amallari,   qavslar,   nuqta   va   o’zgaruvchi   sifatida   x,   y,   z   belgilar
ishlatilgan.
Algoritm berilgan arifmetik ifodaning sonli qiymatini hisoblashi uchun mos
sintaktik   daraxtni   hosil   qilishi   kerak.   O’zgaruvchilarning   berilganqiymatlariga
ko’ra sonli qiymatni hisoblashni amalga oshiruvchi metodga o'tkaziladi.
Har  bir  berilgan arifmetik ifoda uchun obyektlar  daraxti  bir  marta  quriladi.
So'ngra,   obyektlar   daraxtidan   foydalanib,   o’zgaruvchilarning   berilgan   turli
qiymatlari uchun arifmetik ifodaning qiymati hisoblanadi. 
Algoritm   ichma-ich   joylashgan   qavslar   qatnashgan   yetarlicha   uzunlikdagi
arifmetik ifodalarini qayta ishlash imkoniyatiga ega bo’lishi kerak kerak.
Arifmetik ifodaning leksik tahlili.
48 Kirish   ifodasini   to'g'ridan-to'g'ri   tahlil   qilishdan   oldin,   ortiqca   belgilarni
(masalan,   bo'sh   joy   va   h.k.   larni   olib   tashlash   va   faqat   leksemlarni   hosil   qilish
maqsadga   muvofiqdir.  Ushbu  protsedura  algoritm   doirasida   majburiy  emas,  lekin
algoritmni   va   uning   dasturiy   ta'minotini   tushunishni   sezilarli   darajada
soddalashtirishga imkon beradi.
Misol   uchun,   yuqorida   keltirilgan   arifmetik   ifoda   satrini   ko'rib   chiqaylik:
(x+10.2)^2+5*y-z. Leksik tahlil jarayonida ko'rinishdagi satrga aylanadi:
[0]=>”(”,[1]=>”x”,[2]=>”+”,[3]=>”10.2”,[4]=>”)”,[5]=>”^”,[6]=>”2”,[7]=>”+”,
[8]=>”5”,[9]=>”*”,[10]=>”y”,[11]=>”-”,[12]=>”z”.
Shunday   qilib,   leksema   arifmetik   amal   yoki   son   yoki   o’zgaruvchi   yoki
ochilgan-yopilgan qavsdan iborat bo’ladi. 
Leksema obyekt sifatida quydagicha aniqlanadi:
Keltirib chiqarish daraxt tarkibidagi leksema obyekt sifatida tavsiflanadi. Bu
obyekt bir qancha xususiyat (maydon) va aniq bir xolatga ega bo’ladi. Leksemani
madellashtiruvchi obyektning bir qancha maydonlarini tavsifi quydagicha bo’ladi:
1. Name  maydoni- obyektning ulkan nomi;
2. Lec   maydoni-   leksemalar   massivi   bo’lib   unda   arifmetik   ifodaning
navbatdagi   qismiga   mos   keladigan   daraxt   tuguni   to’g’risidagi   ma’lumot
saqlanadi.
3. Cons   maydoni-   agar   ushbu   obyekt   kanstanta   bo’lsa   unga   mos   qiymat
saqlanadi.
4. Var   maydoni-   agar   obyekt   son   yoki   o’zgaruvchi   bo’lsa,   bu
o’zgaruvchiga uning qiymati saqlanadi.
Har   bir   obyektning   xolati   metodlar   majmuasi   orqali   tavsiflanadi.   Biz
qarayotgan misolda calc() metodi yetarli bo’ladi. Agar obyekt son yoki parameter
holatini   ifodalasa   u   holda   metod   ushbu   son   yoki   parameter   qiymatini   aniqlash
lozim.   Agar   obyekt   arifmetik   operatsiya   sifatidagi   leksemani   ifodalasa   u   xolda
metod mos juftlikdagi qiymatda ushbu arifmetik ammalni qo’llash natijasini hosil
qilishi lozim. 
49 Daraxtning barcha obyektlari bitta sinfga tegishli bo’lib, obyekt hosil qilish
uchun   metodni   qo’llash   yetarli.   Yoki,   calc()   sifatidagi     bitta   abstract   funksiyadan
iborat   obstrak   sinf   hosil   qilish   yetarli.   Shuning   uchun   har   bir   turdagi   leksema
uchun   abstract   sinfni   voris   qiladigan   va   calc()   metodning   aniq   holatini
ifodalaydigan   sinf   yaratiladi.   Shuning   uchun   bizning   dasturimizda   sezilarli
darajada   kam   xotira   talab   qiladigan   oxirgi   usul   tanlangan.   Dasturiy   ta’minotni
universallashtirish   uchun   bazi   bir   maydonnlar   bo’sh   qoldirilishi   mumkin.   Ya’ni
kelajakda yangi leksemani  madellashtirsh uchun. Bu esa arifmetik ifoda tarkibida
matematik va foydalanuvchi funksiyalarni qo’shish imkonyatini beradi.
3.3. Dasturiy ta’minotning tarkibiy qismlari va ularning tavsifi.
Matematik   ifodalarni   tahlil   qilish   va   hissoblash   jarayonini   amalga
oshiradigan   mavjud   algoritm   va   dasturiy   taminotlarda   quydagi   kamchiliklar
mavjud:
 arifmetik ifoda hadlarini yozuvda alfavit chegaralangan;
 mavjud   elementar   funksiyalarning   barchasining   ishtiroki   hissobga
olinmagan;
 foydalanuvchilar   tomonidan   hosil   qilingan   funksiyalarga   murojat
qilish imkoniyati berilmagan;
Ushbu   kamchiliklarni   bartaraf   etish   uchun   disertatsiya   ishida,   murakkab
algebraik   ifodalarni   munosabatlar   matrisasini   modellashtirish   va   interpretatorini
yaratish masalasi qaralgan.
M urakkab   algebraik   ifodalarni   tahlil   qilish   va   hisoblash   usullarini
takomillashtirilib,   dasturiy   ta’minotini   ishlab   chiqigan   va   uning   tarkibiy   qismi
quyiladigalardan iborat.
Function   func1(formula:string;   var   xabar:string;   natija:boolean) -
foydalnuvchi   tomonidan   kiritilgan   formulani   tahlil   qilish   va   uni   to’g’ri   yoki
noto’g’ri kiritilganligi haqidagi xabarni beruvchi protsedura.
Bunda:
50 formula- foydalanuvchi tomonidan kiritilgan formula, turi satr;
xabar- foydalanuvchi tomonidan kiritilgan formulaning to’g’ri yoki noto’g’ri
ekanligi haqidagi ma’lumotni beruvchi o’zgaruvchi, turi satr;
natija -kiritilgan   formula   to’g’ri   bo’lsa   “true”   qiymatni   aks   holda   “false”
qiymatni   oladi,   turi   mantiqiy.   Bu   o’zgaruvchi   qiymatidan   dastur   ishlashining
keyingi qadamlarida foydalaniladi.
Function   uzgaruvchikiritish(uzgaruvchi:string;   uzgarmas:string;   var
xabar:string;uznatija:boolean) -o’zgaruvchi   va   o’zgarmas   qiymatlarni   kiritish
protsedurasi.
Bunda:
uzgaruvchi- foydalanuvchi tomonidan kiritilgan o’zgaruvchi, turi satr;
uz garmas- foydalanuvchi tomonidan kiritilgan o’zgarmas, turi satr;
xabar- foydalanuvchi   tomonidan   kiritilgan   o’zgaruvchi   va   o’zgarmaslarning
to’g’ri yoki noto’g’ri ekanligi haqidagi ma’lumotni beruvchi o’zgaruvchi, turi satr;
uznatija -o’zgaruvchi   va   o’zgarmaslar   to’g’ri   kiritilgan   bo’lsa   “true”
qiymatni   aks   holda   “false”   qiymatni   oladi,turi   mantiqiy.   Bu   o’zgaruvchi
qiymatidan dastur ishlashining keyingi qadamlarida foydalaniladi.
Function selectamal (amal: string; var xabar: string; amalnatija: boolean)
- amallarni kiritish protsedurasi.
Bunda:
amal- foydalanuvchi tomonidan kiritilgan amal, turi satr;
xabar- foydalanuvchi   tomonidan   kiritilgan   amalning   to’g’ri   yoki   noto’g’ri
kiritilganligi haqidagi ma’lumotni beruvchi o’zgaruvchi, turi satr;
amalnatija -amal   to’g’ri   kiritilgan   bo’lsa   “true”   qiymatni   aks   holda   “false”
qiymatni   oladi,   turi   mantiqiy.   Bu   o’zgaruvchi   qiymatidan   dastur   ishlashining
keyingi qadamlarida foydalaniladi.
Function   tpy(uzgaruvchifor:string;   var   uzgaruvchi,amal:string;
natija:string) -berilgan   formulani   teskari   polyakcha   yozuv   algoritmiga   tayyorlash
uchun o`zgaruvchi va amallarni birlik o`lchamda shifrlash protsedurasi.
51 Bunda:
uzgaruvchifor   – berilgan   masala   yoki   foydalanuvchi   tomonidan   kiritilgan
formulalar bo’lib, o’zgaruvchi, turi satr;
uzgaruvchi,amal   – berilgan  topshiriqning o`zgaruvchi  va  amallar  qismlariga
ajratish o’zgaruvchilari, turi satr;
natija -kiritilgan   formulaning   shifrlangan   ko`rinishdagi   natijasi.   Bunda
o`zgaruvchilar   harflar   bilan   amallar   raqamlar   bilan   almashtiriladi.Bu   o’zgaruvchi
qiymatidan dastur ishlashining keyingi qadamlarida foydalaniladi.
Function   splitstr(uzgaruvchijad:jad;   var   xabar:   string;   ajrat   natija:
integer) -berilgan   formulani   bo’laklarga   ajratilgan   tarzda   kiritish   va   uni   to’g’ri
bajarilganligini tekshirish protsedurasi.
Bunda:
jad=arry[1..N]of string;
uzgaruvchijad- foydalanuvchi   tomonidan   kiritilgan   formlalarro’yxati   bo’lib,
o’zgaruvchi, turi jad;
xabar- foydalanuvchi   tomonidan   kiritilgan   formulalarning   to’g’ri   yoki
noto’g’ri ekanligi haqidagi ma’lumotni beruvchi o’zgaruvchi, turi satr;
ajratnatija -kiritilgan   formulalar   barchasi   to’g’ri   bo’lsa   “true”   qiymatni   aks   holda
“false”   qiymatni   oladi,   turi   mantiqiy.   Bu   o’zgaruvchi   qiymatidan   dastur
ishlashining keyingi qadamlarida foydalaniladi.  
3.4.Dasturiy ta’minotning amaliy tadbiqi.
Sun’iy   aql   o’yini   -   bu   kompyuter   tomonidan   boshqariladigan   ob’ektlarlar
hatti-harakatlarini kompyuter dasturiy ta'minotidir. 
Sun'iy   intelekt   o'yini   evristik   algoritmlari   o'yin   doirasida   turli   sohalarda
qo'llaniladi.   O'yin   ichidagi   sun'iy   intellektning   eng   aniq   ishlatilishi   NPClarni
boshqarishda,   garchi   skriptlar   juda   keng   tarqalgan   boshqaruv   shakli   bo'lsada.
Yo'lni aniqlash - bu o'yin sun'iy intellektining yana bir keng qo'llanilishi, ayniqsa
real   vaqtda   strategik   o'yinlarda.   Pathfinding   -   bu   NPC   xaritadagi   bir   nuqtadan
52 boshqasiga   qanday   o'tishini   relyef,   to'siqlar   va   ehtimol   "urush   tumanini"   hisobga
olgan holda aniqlash usulidir.
53 "16384" o'yini.
O'yin   16384   -   bu   olti   burchakli   plitkalar   joylashgan   3x3x3   olti   burchakli
maydonda sodir bo'ladigan mantiqiy o'yin (1-rasmga qarang).
O'yin   16384   -   bu   olti   burchakli   plitkalar   joylashgan   3x3x3   olti   burchakli
maydonda sodir bo'ladigan mantiqiy o'yin (1-rasmga qarang).
rasim  1 O'yin skrinshoti 16384
O ' yin   quyidagi   qoidalarga   muvofiq   o ' tkaziladi :
1. Har bir turda "1", "2" yoki "4" qiymatiga ega bo'lgan denominatsiya plitasi
paydo bo'ladi
2. Klaviaturani   bosib,   o'yinchi   o'yin   maydonining   barcha   plitalarini   6
tomonning birida tashlashi mumkin. Agar tushganida bir xil nomdagi ikkita
plitka   bir-biriga   "urilib"   tushsa,   u   holda   ular   bir-biriga   yopishib   qoladi,
ularning nominatsiyasi bog'langan plitkalar yig'indisiga teng bo'ladi. Har bir
harakatdan so'ng maydonning erkin qismida "1" qiymatiga ega yangi plitka
54 paydo   bo'ladi.   Agar   tugma   bosilganda,   plitkalarning   joylashishi   yoki
ularning nomlari o'zgarmasa, u holda harakat amalga oshirilmaydi.
3. Har bir ulanish uchun o'yin ballari hosil bo'lgan plitkaning nominal qiymati
bilan oshiriladi.
4. Agar   keyingi   harakatdan   keyin   harakatni   bajarish   imkonsiz   bo'lsa,   o'yin
yo'qotish bilan tugaydi.
5. Agar   keyingi   harakatdan   keyin   nominal   qiymati   "16384"   bo'lgan   plitka
paydo bo'lsa, o'yin g'alaba bilan tugaydi.
Ishning mohiyati .
16384 o'yini uchun sun'iy aqlni amalga oshirish uchun sizga quyidagilar kerak
bo'ladi:
1)   O'yinning  o'zi  16384  grafik  interfeysi   va  uni   o'zingiz  o'ynash  qobiliyatini
talab qiladi. O'yin qoidalarga muvofiq, to'g'ri ishlashi  kerak. Yutganingizda yutuq
haqida, yutqazganingizda zarar haqida xabarnoma bering. O'yin eng yaxshi ballni
(maksimal   ochkolar   sonini)   faylga   saqlashi   va   o'yin   davomida   eng   yaxshi   va
dolzarb natijalarni ko'rsatishi kerak. Eng yaxshi ko'rinish uchun plitkalar qiymatiga
qarab rangini o'zgartiradi.
2) sun'iy intellekt, bu o'yinni juda qisqa vaqt ichida g'alaba qozonishiga olib
keladi, shu bilan birga tizim resurslaridan unchalik foydalanmaydi. Sun'iy intellekt
alfa-beta qirqishni optimallashtirish bilan minimaks algoritmidan va o'yinchi uchun
daraxt   daraxti   barglarining   rentabelligini   baholashga   imkon   beruvchi   baholash
funktsiyasidan iborat.
Rivojlantirilgan algoritmlarning tavsifi :
Ushbu   bo'lim   ishlab   chiqilgan   algoritmlarni   tavsiflaydi:   HMO-dagi   chiziqli
ozuqa,   HMO-dagi   ifodani   hisoblash,   dastlabki   satrda   xatolarni   olish   algoritmlari,
shuningdek, arifmetik amallar algoritmlari.
55 Polshacha yozuvga o'tish .
Teskari qutb yozuvlari (OPN) - bu matematik ifodalarni yozish shakli bo'lib,
unda operandlar operatsiya belgilari oldida joylashgan. Shuningdek, teskari Polsha
yozuvi, teskari  braceless   notation (OBZ),  postfix notation,  Lukashevich   braceless
notation, Polsha teskari yozuvi, POLIZ.
Yozuvidagi   iboralarni   baholashni   avtomatlashtirish   stekdan   foydalanishga
asoslangan. Stek mashinasi uchun hisoblash algoritmi oddiy:
Kirish belgilarini qayta ishlash:
1) Agar operand kirish sifatida berilsa, u stackning yuqori qismiga suriladi.
2) Agar operatsiya belgisi kirish sifatida berilgan bo'lsa, unda tegishli operatsiya
qo'shilish tartibida olingan stekdan chiqarilgan kerakli qiymatlar soni bo'yicha
amalga   oshiriladi.   Amalga   oshirilgan   operatsiya   natijasi   stakning   yuqori
qismiga qo'yiladi.
3) Agar kiritilgan belgilar to'plami to'liq bo'lmasa, 1-bosqichga o'ting.
Kiritilgan belgilar to'plami to'liq qayta ishlangandan so'ng, ifoda to'plamning
yuqori qismiga qadar baholanadi.
Dasturiy   ta'minot   va   qo'shimcha   qurilmalar   to'plamini   amalga   oshirish   juda
sodda va juda samarali bo'lishi mumkin. Teskari Polsha yozuvi to'liq birlashtirilgan
-   asosan   teng,   ikkilik,   uchlik   va   boshqa   har   qanday   operatsiyalarni   yozadi,
shuningdek funktsiyalarga chaqiradi, bu esa qo'llab-quvvatlanadigan operatsiyalar
to'plamini   kengaytirishda   hisoblash   moslamalari   dizaynini   murakkablashtirmaslik
imkonini   beradi.   Bu   ba'zi   ilmiy   va   dasturlashtiriladigan   kalkulyatorlarda   teskari
Polsha yozuvidan foydalanish uchun sabab bo'lgan.
Polshacha yozuvda ifodani hisoblash algoritmi .
Aniqlik   uchun   quyida   teskari   Polsha   yozuvida   ifodani   hisoblash   misoli
keltirilgan.   1.1-rasmda   Polshacha   yozuvda   hisoblashda   stak   va   qolgan   zanjirning
bosqichma-bosqich o'zgarishi ko'rsatilgan.
56 Polsha   teskari   yozuvlari   stacked   kompyuterda   formulalarni   hisoblash   uchun
juda mos keladi. Formula n ta belgidan iborat bo'lib, ularning har biri operand yoki
operator   hisoblanadi.   Stek   yordamida   teskari   Polsha   yozuv   formulasini   hisoblash
algoritmi   oddiy.   Siz   faqat   chapdan   o'ngga   teskari   Polsha   yozuvini   o'qishingiz
kerak. Agar operand duch kelsa, uni stakka surish kerak. Agar operator duch kelsa,
siz belgilangan operatsiyani bajarishingiz kerak.
Misol   tariqasida   quyidagi   ifodani   hisoblashni   ko'rib   chiqing:   teskari   Polsha
yozuvidagi   mos   keladigan   formula   quyidagi   ko'rinishga   ega:
( 8 + 2 ∗ 5 ) / ( 1 + 3 ∗ 2 − 4 ) 825 ∗ + 132 ∗ + 4 − ¿
Stekning yuqori  qismidagi  raqam  -  o'ng operand (chap tomondan emas). Bu
bo'linish,   ayirish   va   eksponatlash   operatsiyalari   uchun   juda   muhimdir,   chunki   bu
holda   operandlarning   tartibi   muhim   (qo'shish   va   ko'paytirish   amallaridan   farqli
o'laroq).   Boshqacha   qilib   aytganda,   bo'linish   jarayoni   quyidagicha   ishlaydi:
birinchi navbatda numerator stakka, so'ngra maxrajga suriladi va keyin operatsiya
to'g'ri   natijani   beradi.   E'tibor   bering,   teskari   Polsha   yozuvini   mashina   kodiga
aylantirish juda oson: faqat formulani teskari Polsha yozuvida kuzatib boring, har
bir  belgi uchun bitta buyruq yozing. Agar belgi  doimiy yoki  o'zgaruvchan bo'lsa,
bu doimiy yoki o'zgaruvchini stekka qo'yish buyrug'ini, agar belgi operator bo'lsa,
ushbu operatsiyani bajarish uchun buyruq yozishingiz kerak.
Polshacha yozuvda bosqichma-bosqich hisoblash
57 Xatolarni aniqlash .
Xatolarni aniqlash uchun 2 funktsiyani amalga oshiriladi:
1) Yozib olishda xatolarni ushlash;
2) Ifoda xatolarini ushlash.
Birinchi funktsiya quyidagi xatolarni keltirib chiqaradi:
1) Qavslar soni noto‘g‘ri (ochiladiganlar soni yopiladiganlar soniga teng
emas) yoki ikki xil qavs ketma-ket ketmoqda;
2) Ikki operand ketma-ket ketmoqda;
3) Noma'lum belgi kiritildi;
4) Faktorial funktsiya noto'g'ri kiritilgan;
5) Noto'g'ri kiritilgan unary minus;
6) Agar   yopilish   qavsidan   keyin   yoki   ochilishidan   oldin   raqam   bo'lsa
(masalan, "6 (8 * 7 + 9)").
Ikkinchi turdagi xatolarni ushlash (ifodada) teskari Polsha yozuvida hisoblash
funktsiyasida   amalga   oshiriladi   va   u   bunday   xatolarni   qaytaradi   (xato   topishi
bilanoq, darhol xato raqamini qaytaradi).
1)  Raqamda 1 dan ortiq nuqta;
2) 0 ga bo'linish;
3) Faktorial raqam butun son emas;
4) Faktorial raqam manfiy;
5) Ko'rsatkich   raqami   butun   son   emas   (chunki   men   shunchaki   n   sonini
o'zim   k   marta   ko'paytirib,   ko'rsatkichni   bajaraman,   keyin   k   butun   son   va   0   dan
katta bo'lishi kerak);
6) 0 dan kam ko'rsatkich;
58 7) Ildiz ostidagi raqam 0 dan kam;
8) Tangens hozirda mavjud emas.
Agar kamida bitta xato bo'lsa, dastur xato haqidagi xabarni chiqaradi.
III-Bob bo’yicha xulosalar.
Ushbu bobda matematik ifodalarni hisoblash jarayonini tahlil qilsih, maxsus
yozuv ko’rinishga o’tkazish va uni berilgan qiymatlar asosida  hisoblashni  amalga
oshirish dasturining tavsifi ko‘rsatilgan.
Matematik   ifodalarni   tahlil   qilish   va   hissoblash   jarayonini   amalga
oshiradigan   mavjud   algoritm   va   dasturiy   taminotlardagi   kamchiliklar   va   ularni
bartaraf etish ko’rsatilagan
59 XULOSA
Dissertatsiya ishining asosiy natijalari:
 matematik   ifodalarning   tarkibiy   qisimlari:   bir   had,   matematik   funksiya,
foydalanuvchi   funksiyasi,   son,   o’zgaruvchilarni   aniqlash   hamda   ularni
sintaktik ta’rifi aniqlandi;
 matematik ifodalarni  sintaktik tahlilini algoritmi va dasturi ishlab chiqildi;
 ma’lumotlar   stekini   tashkil   etish   va   ularni   qayta   ishlash   algoritmi     va
dasturini ishlab  chiqildi;
 berilgan   matematik   ifodani   polyakcha   (postfiks)   yozuvini   hosil   qilish
algoritmi va dasturi ishlab chiqildi; 
 postfiks yozuvidagi ifodani hisoblash algoritmi va dasturi yaratildi;
 obyektga   yo‘naltirilgan   yondashuv   asosida   dasturni   amalga   oshirish
konsepsiyasini ishlab  chiqildi;
 dasturiy ta’minot tavsifi berildi va undan foydalanish ko’rsatildi.
Ilmiy   yangiligi,   arifmetik   ifodalarni   tahlil   qilish   va   hisoblashda   matematik
va foydalanuvchilar  funksiyasini  inobatga olinganligi  va polyakcha  yozuvni  hosil
qilish algoritmini takomillashtirilganligi bilan izohlanadi. 
Amaliy   ahamiyati:   amaly   masalalarni   kompyuterda   modellashtirish
jarayonida   hosil   bo’ladigan   formulalarni   tahlil   qilish   hisoblash   jarayonini
avtomatlashtirish imkoniyatini beradi. 
60 FOYDALANILGAN ADABIYOTLAR RO’YXATI
Normativ huquqiy hujjatlar:
1. O’zbekiston Republikasining  « Ta’lim to’g’risidagi to’g’risidagi » gi Qonun . –
Т.: « O’zbekiston », 1997.
2. O’zbekiston Republikasining «Kadrlar tayyorlash milliy dasturi». –  Т .: 
«O’zbekiston», 1997.
3. O’zbekiston Republikasi Kadrlar tayyorlash milliy dasturi  //  Barkamol avlod
–  O’zbekiston taraqqiyotining poydevori . – Toshkent  :  Sharq , 1997. – 31-61 
4. «Yuksak bilimli va intellektual rivojlangan avlodni tarbiyalash – mamlakatni
barqaror   taraqqiy   ettirish   va   modernizatsiya   qilishning   eng   muhim   sharti»
mavzusidagi   Xalqaro   konferensiyaning   yakuniy   hujjati   –   rezolyusiyasi.     –
«Xalq so’zi», 2012, 22 fevral.
Darslik va o’quv qo’llanmalar
5.   Б.   Н.   Иванов.   Дискретная   математика.   Алгоритмы   и   программы.
Учебное пособие.-М.:Лаборатория Базовых Знаний, 2003, 288с.
6. Дискретная   математика   для   программистов   /   Ф.   А.   Новиков   –СПб:
Питер 2000. 304-с.
7. В.Н.Касянов, В.К.Сабелфелд. Сборник заданий по практикуму на ЕВМ,
Учебное пособие, Москва, Наука,  1986 г, [184-233].
8. Н.Вирт.   Структура   данных   +алгоритмы   =программа,Учебное   пособие,
Москва,Мир, 1985 г. [261-287].
9.    А.В. Гордеев, А.Ю. Молчанов. Системное программное обеспечение.
–Спб.: Питер, 2002. – 736 с.
10.     Х.   Дейтел,   П.   Дейтел,   С.   Сантри.   Технологии   программирования   на
Java 2. Книга 3: Корпоративные системы, сервлеты, JSP, Web–сервисы.
M.: Бином, 2003. 
61 11.     И.   Соммервилл.     Инженерия   программного   обеспечения.   6–ое   изд.:
Пер. с англ. – M.: Вильямс, 2002.
12.   F.   Buschmann,   R.   Meunier,   H.   Rohnert,   P.   Sommerlad,   M.   Stal.   Pattern–
Oriented Software Architecture. Wiley, 2002.
13.   ISO/IEC   12207:1995,   Information   Technology   –   Software   life   cycle
processes, 1995. Amendments 2002, 2004.
14.   V. Bruegge, A.Dutout. Odject oriented Software Engineering,  2004.
15.   Т. Кормен, Ч. Лейзерсон, Р. Ривест. Алгоритмы: построение и анализ.
М.: МСНМО, 1999.
Internet sahifalar
1. http://    www.ziyonet.uz   
2. http://    www.tuit.uz     
3. https://www.w3schools.com/   
4. https://dasturchi.uz/   
5. https://community.uzbekcoders.uz/   
6. http://www.camtasia-studio.ru.softonic.com/   
7. https://www.skillgrower.com   
8. https://www.programmer.uz/   
62 ILOVA
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Tenglamalar sistemasi</title>
<link rel="stylesheet" 
href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" 
integrity="sha384-
1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jI
W3" crossorigin="anonymous">
<style type="text/css">
#jadval{
margin-top: 50px;
}
.palitra button{
margin-top: 5px;
}
</style>
</head>
<body>
[a]and[b]or![c]->([a]or[b])<=>[a]+[d]na[a]|[b]
<div class="container">
<div class="row">
<div class="col-md-6">
<h3>Tenglamalar sistemasini kiriting</h3>
<table class="table" id="sistema">
<tr>
63 <td><input id="t1" type="text" 
name="tenglama[]" class="form-control"></td>
<td>=</td>
<td><select><option>1</option><option>0</option></select></td>
<td><button class="btn btn-success" 
id="addtugma">+</button></td>
</tr>
</table>
</div>
<div class="col-md-6 palitra">
<h3>Kiritish</h3>
<button onclick="cin('0')" class="btn btn-
secondary">0</button>
<button onclick="cin('1')" class="btn btn-
secondary">1</button>
<button onclick="cin('[a]')" class="btn btn-
secondary">a</button>
<button onclick="cin('[b]')" class="btn btn-
secondary">b</button>
<button onclick="cin('[c]')" class="btn btn-
secondary">c</button>
<button onclick="cin('[d]')" class="btn btn-
secondary">d</button>
<button onclick="cin('[f]')" class="btn btn-
secondary">f</button>
<button onclick="cin('[w]')" class="btn btn-
secondary">w</button>
<button onclick="cin('[x]')" class="btn btn-
secondary">x</button>
64 <button onclick="cin('[y]')" class="btn btn-
secondary">y</button>
<button onclick="cin('[z]')" class="btn btn-
secondary">z</button>
<h3>Amallar</h3>
<button onclick="cin('(')" class="btn 
btn-secondary">(</button>
<button onclick="cin(')')" class="btn 
btn-secondary">)</button>
<button onclick="cin('!')" class="btn btn-secondary">!
(Inkor)</button>
<button onclick="cin('and')" class="btn btn-
secondary">and (Konyuksiya)</button>
<button onclick="cin('or')" class="btn btn-secondary">or 
(Dizyunksiya)</button>
<button onclick="cin('->')" class="btn btn-secondary">->
(Implikatsiya)</button>
<button onclick="cin('<=>')" class="btn btn-
secondary"><=> (Ekvivalensiya)</button>
<button onclick="cin('+')" class="btn btn-secondary">+ 
(2 modul bo'yicha qo'shish)</button>
<button onclick="cin('|')" class="btn btn-secondary">| 
(Sheffer shtrixi)</button>
<button onclick="cin('na')" class="btn btn-secondary">na
(Pirs streklasi)</button>
</div>
</div>
<div style="margin-top: 20px;">
65 <button onclick="hisobla()" class="btn btn-
success">HISOBLA</button>
<button id="sistema" class="btn 
btn-primary">Sistema</button>
<button id="tozala" class="btn btn-danger">Tozalash</button>
</div>
<div class="row">
<div class="col-md-12">
<table class="table table-bordered table-responsive table-
striped" id="jadval">
<tr>
<th>Qiymatlar</th>
<th>Natijalar</th>
</tr>
</table>
</div>
</div>
</div>
<script 
src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" 
integrity="sha512-
894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPS
iiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" 
referrerpolicy="no-referrer"></script>
<script 
src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js" 
integrity="sha384-
66 VHvPCCyXqtD5DqJeNxl2dtTyhF78xXNXdkwX1CZeRusQfRKp+tA7hAShOK/
B/fQ2" crossorigin="anonymous"></script>
<script 
src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" 
integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXg
qbR9W8oWht/amnpF" crossorigin="anonymous"></script>
<script type="text/javascript">
var i=1;
$('#addtugma').click(function() {
i++;
$('#sistema').append('<tr id="row'+i+'"><td><input id="t'+i+'" 
type="text" name="tenglama[]" 
class="form-control"></td><td>=</td><td><select><option>1</option><option>
0</option></select></td><td><button class="btn btn-danger uchir" 
id="'+i+'">X</button></td></tr>');
});
var aktiv = 1;
$(document).on('click','.uchir',function(){
          var button_id=$(this).attr("id");
          $("#row"+button_id+"").remove();
        });
// $('#uchir').click(function() {
//  alert('salom');
//  let id = $(this).attr("id");
//  $('#row'+id).remove();
// });
function cin(ch) {
let s = $("#t1").val();
s += ch;
67 $('#t1').val(s);
}
function getvars(s) {
let vars = [];
const letters = new Set();
let n = s.length;
let temp = '';
for (var i = 0; i < s.length; i++) {
if(s[i]=='['){
let j = i+1;
temp = '';
for (;;) {
if(s[j]!=']'){
temp += s[j]
}
else{
break;
}
j++;
}
letters.add(temp);
}
}
letters.forEach(function display(i,set){  
vars.push(i);
})
vars.sort();
return vars;
}
68 function chinlik(n) {
m = Math.pow(2,n);
//console.log(n,m);
var a = new Array(2);
let q = 1;
t = m;
for (var i = 0; i < n; i++) { // o'zgaruvchilar soni bo'yicha
a[i] = [];
var t = t/2;
for(var j = 0; j < m; j++){
if(q){
q = 0;
}
else{
q = 1;
}
for(var x=1; x<=t; x++){
// 4 -> 2^4 = 16 16/2
a[i][j] = q;
//console.log('i=',i,'j=',j,'t=',t);
j++;
}
j--;
}
}
return a;
}
function hisobla() {
let s = $('#t1').val();
69 console.log(s);
console.log(chinlik(getvars(s).length));
console.log(getvars(s)); //o'zgaruvchilar
//console.log(getvars(s).length); //o'zgaruvchilar soni
let n = getvars(s).length;
let values = chinlik(n);
console.log();
//console.log(amallar(s));
let zapis = calc(amallar(s));
evaluatePostfix(zapis,values,getvars(s));
}
function amallar(a) {
let n = a.length; 
let k = 0;
let s = '';
while(a.indexOf("!")!=-1){
a = a.replace("!","2");
}
while(a.indexOf("and")!=-1){
a = a.replace("and","3");
}
while(a.indexOf("or")!=-1){
a = a.replace("or","4");
}
while(a.indexOf("->")!=-1){
a = a.replace("->","5");
}
while(a.indexOf("<=>")!=-1){
a = a.replace("<=>","6");
70 }
while(a.indexOf("+")!=-1){
a = a.replace("+","7");
}
while(a.indexOf("|")!=-1){
a = a.replace("|","8");
}
while(a.indexOf("na")!=-1){
a = a.replace("na","9");
}
return a;
}
function check(s) {
var set = new Set(['2','3','4','5','6','7','8','9','(',')']);
return set.has(s);
}
function deshifr(s) {
switch(s){
case '2':return '!';
case '3':return 'and';
case '4':return 'or';
case '5':return '->';
case '6':return '<=>';
case '7':return '+';
case '8':return '|';
case '9':return 'na';
default: return null;
}
}
71 function daraja(amal) {
if(amal=='2'){
return 9;
}
if(amal=='3'){
return 8;
}
if(amal=='4'){
return 7;
}
if(amal=='5'){
return 6;
}
if(amal=='6'){
return 5;
}
if(amal=='7'){
return 4;
}
if(amal=='8'){
return 3;
}
if(amal=='9'){
return 2;
}
if(amal=='('){
return 10;
}
if(amal==')'){
72 return 11;
}
}
function calc(s) {
//console.log(s); // bu yerga qavssiz ifoda keladi.
let ans = ''; //Polskiy yozuvi uchun oxirgi javob
let ifodalar = [];
n = s.length;
var stek = [];
for (var i = 0; i < s.length; i++) {
let ch = s[i];
if(ch=="[" || ch=="0" || ch=="1"){
if(ch=="0" || ch=="1"){
ifodalar.push(s[i]);
ans += s[i];
}
else{
let temp = '';
while(s[i]!="]"){
temp += s[i];
ans += s[i];
i++;
}
temp += s[i];
ifodalar.push(temp);
ans += s[i];
}
//console.log(ans);
}
73 else{
if(!check(s[i])){
console.log("Noto'g'ri amal kiritildi");
return "Noto'g'ri amal kiritildi";
}
else{
if(stek.length == 0){
stek.push(s[i]);
}
else{
last = stek.length - 1;
if(daraja(s[i])>daraja(stek[last])){
if(s[i]==')'){
for (var index = last; 
index >= 0; index--) {
if(stek[index]!="(")
{
ifodalar.push(stek[index]);
ans += 
stek[index];
         stek.pop();
        }
        else{
         stek.pop();
         break;
        }
}
}
else{
74 stek.push(s[i]);
}
}
else{
if(stek[last] == '('){
stek.push(s[i]);
}
if(stek[last]!='('){
last = stek.length - 1;
while(daraja(stek[last])>daraja(s[i])){
ifodalar.push(stek[last]);
ans += stek[last];
stek.pop();
last = stek.length - 
1;
}
stek.push(s[i]);
}
}
}
}
}
}
last = stek.length-1;
while (stek.length > 0) {
ifodalar.push(stek[last]);
        ans += stek[last];
        last--;
75         stek.pop();
    }
    let des = '';
    for (var i = 0; i < ifodalar.length; i++) {
     if(ifodalar[i].length==1){
     des += deshifr(ifodalar[i]);
     }
     else{
     des += ifodalar[i];
     }
    }
console.log("POLSKIY =",ans);
console.log("POLSKIY =",des);
console.log("Ifodalar stekda",ifodalar);
return ifodalar;
}
function isoperand(s) {
let f = String(s);
if(f.indexOf("[")!=-1 || f.indexOf("]")!=-1 || f=="0" || f=="1"){
return true;
}
else{
return false;
}
}
function asli(left,right,oper) {
switch(oper){
case '2': { // INKOR ga murojat payti leftga 0 qiymat 
yuborilsin
76 if(right == 1){
return 0;
}
else{
return 1;
}
break;
}
case '3': { // Konyuksiya
if(left == 1 && right == 1){
return 1;
}
else{
return 0;
}
break;
}
case '4': { // Dizunksiya
if(left == 0 && right == 0){
return 0;
}
else{
return 1;
}
break;
}
case '5': { // Implikatsiya
if(left == 1 && right == 0){
return 0;
77 }
else{
return 1;
}
break;
}
case '6': { // Ekvivalensiya
if(left == right){
return 1;
}
else{
return 0;
}
break;
}
case '7': { // Ikki modul
if(left != right){
return 1;
}
else{
return 0;
}
break;
}
case '8': { // Sheffer
if(left == 1 && right==1){
return 0;
}
else{
78 return 1;
}
break;
}
case '9': { // Pirs
if(left == 0 && right==0){
return 1;
}
else{
return 0;
}
break;
}
default:{
return oper+" bunaqa amal mavjud emas " + left + 
" va " + right;
}
}
}
function getvals(operand,vars) {
if(operand==0){
return 0;
}
if(operand==1){
return 1;
}
else{
operand = operand.substring(1,operand.length-1);
79 for (var i = 0; i < vars.length; i++) {
if(vars[i]==operand){
// console.log(i);
break;
}
}
return i;
}
}
function evaluatePostfix(stack,values,vars){
$("#jadval tr td").remove();
//console.log(vars);
    //bu funksiyani hisoblash uchun bizga ifodalar stekda va unga 
qo'yiladigan qiymatlar kerak bo'ladi, shuning uchun exp ifodalar valuesga uning 
qiymatlari kerak bo'ladi
    console.log(values);
        let exp = stack;
        let key = 0;
        let setexp = [...stack];
        let massiv = new Array(2);
        for (var ustun = 0; ustun < values[0].length; ustun++) {
         let mmm = [];
         exp = [...stack];
         console.log(exp);
         for (var jadval = 0; jadval < values.length; jadval++) {
mmm.push(values[jadval][ustun]);
         }
         massiv[ustun] = mmm;
80          // console.log(mmm);
         // console.log(exp);
         // console.log(stack);
         // console.log(setexp);
        // Barcha ifodlarni birma bir ko'rib chiqamiz
        //continue;
        
        console.log(massiv[ustun]);
        while(exp.length!=1){
         key++;
         //console.log(key);
         if(exp.length>=3){
         let o1 = exp[0];
            let o2 = exp[1];
            let ch = exp[2];
            if(isoperand(o1) && isoperand(o2) && ch.length == 1 
&& ch!='2' && ch!= "0" && ch!= "1"){
             // Hammasi joyida mana shu yerda hisoblash 
ketishi kerak va uchala indeks o'chirilib o'rniga natija yozilishi kerak
             // o1,o2 ga qiymat berishimiz kerak
             // console.log(exp);
             if(o1!="0" && o1!="1"){
             o1 = massiv[ustun][getvals(o1,vars)];
             }
             if(o2!="0" && o2!="1"){
             o2 = massiv[ustun][getvals(o2,vars)];
             }
             //console.log(o1,o2,ch);
             exp[0] = asli(o1,o2,ch);
             //console.log(exp[0]);
81              exp.splice(1,1);
             exp.splice(1,1);
             //console.log(exp);
            }
            else{
          if(isoperand(o1) && o2=='2'){
          if(o1!="0" && o1!="1"){
             o1 = massiv[ustun][getvals(o1,vars)];
             }
             exp[0] = asli(0,o1,o2);
             exp.splice(1,1);
          }
          else{
          if(isoperand(o2) && ch=='2'){
          //console.log("Kirdi")
             if(o2!="0" && o2!="1"){
             o2 = massiv[ustun]
[getvals(o2,vars)];
             }
             exp[1] = asli(0,o2,ch);
             exp.splice(2,1);
             //console.log(exp);
          }
          else{
             //console.log("Kirdi");
             let kursatkich = 1;
             while(kursatkich<exp.length){
             let o1 = exp[kursatkich];
            let o2 = exp[kursatkich+1];
82             let ch = exp[kursatkich+2];
             if(isoperand(o1) && 
isoperand(o2) && ch.length == 1 && ch!='2' && ch!="0" && ch!="1"){
             console.log(exp);
            
             if(o1!="0" && o1!="1"){
             o1 = massiv[ustun]
[getvals(o1,vars)];
             }
             if(o2!="0" && o2!="1"){
             o2 = massiv[ustun]
[getvals(o2,vars)];
             }
             //console.log(o1,o2,ch);
             exp[kursatkich] = 
asli(o1,o2,ch);
            
//console.log(exp[kursatkich]);
            
exp.splice(kursatkich+1,1);
            
exp.splice(kursatkich+1,1);
             //console.log(exp);
             break;
             }
             else{
             if(isoperand(o1) && 
o2=='2'){
          if(o1!="0" && o1!
="1"){
83              o1 = 
massiv[ustun][getvals(o1,vars)];
             }
             exp[kursatkich] = 
asli(0,o1,o2);
            
exp.splice(kursatkich+1,1);
             continue;
          }
             if(isoperand(o2) && 
ch=='2'){
         
//console.log("Kirdi")
             if(o2!="0" && o2!
="1"){
             o2 = 
massiv[ustun][getvals(o2,vars)];
             }
             exp[kursatkich+1] 
= asli(0,o2,ch);
            
exp.splice(kursatkich+2,1);
             //console.log(exp);
             continue;
          }
          kursatkich++;
             }
             }
            }
          }
84             }
         }
         else{
         //shu yergacha
         if(exp.length==2){
         console.log("xatolik holati!!!")
         }
         }
         console.log(exp);
         // if(key == 8){
         //  break;
         // }         
        }
        
$('#jadval').append('<tr><td>'+massiv[ustun]+'</td><td>'+exp[0]+'</td></tr>')
        // if(key == 0){
        //  //agar ifoda bo'lsa o'zi bo'lsa
        // }
        // else{
        //  return exp.pop();
        // }
        }
        //console.log(massiv);
}
//s = '[a]and[b]or![c]->([a]or[b])';
s = '![a]and[b]or([c]->[d])';
//calc(amallar(s));
//let exp="231*+9-";
//console.log(chinlik(getvars(s).length));
//console.log(evaluatePostfix(exp,));
85 //console.log(isoperand("2"));
$('#sistema').click(function() {
let nameClasses = 
document.getElementsByClassName("tenglama");
console.log(nameClasses);
});
</script>
</body>
</html>
86