Arifmetika ifodalar
Yuqori darajadagi dasturlash tillari birinchi asosiy maqsadlaridan biri
matematika, ilm-fan va muhandislikda topilgan arifmetik ifodalarni avtomatik
baholash bo‘lgan. Dasturlash tillarida arifmetik ifodalarning ko‘pchilik xususiyatlari
matematikada rivojlangan konvensiyalardan meros edi. Dasturlash tillarida,
arifmetik ifodalar operatorlar, operandlar, qavslar va funksiya chaqiruvlaridan
iborat. Operatorlar “Unar”, ya’ni u bir operandli, “binar” ya’ni ikki operandli
“ternari”(ma’nosi uchta operandi bor ) bo‘lishi mumkin.
Ko‘pchilik dasturlash tillarida, binar operatorlari infix, ular operandlar
o‘rtasida bo‘ladi. Bir istisno bu Perl, ba’zi operatorlari prefix ular operandlaridan
oldin keladi.
Arifmetik ifodaning maqsadi - arifmetik hisoblashni belgilash hisoblanadi.
Bunday hisoblash amalga oshirish ikki harakatlarga sabab bo‘lishi kerak:
operandlarni olib kelish, odatda xotiradan, bu operandlar ustida arifmetik amallarni
bajarish. Quyidagi qismilarda, biz arifmetik ifodalarning umumiy loyihasini tadqiq
etamiz.
Arifmetik ifodalar uchun asosiy dizayn masalalari quyidagilarni, barchasi shu
qismida muhokama qilinadi:
• Operator ustunlik qoidalari nima?
• Operator bog‘liqlik(birlashish) qoidalari nima?
• Operand baholash tartibi qanday?
• Operand baholash yon ta’sirida cheklashlar mavjudmi?
• Til foydalanuvchiga ortiqcha yuklangan belgilangan operatori yo‘l qo‘ya
oladimi?
• Ifodalarda qanday tur aralashtirish yo‘l qo‘yiladi?
Operator hisoblash tartibi
Bir tilning operator ustunligi va birlashish qoidalari uning operatorlarini
hisoblash tartibini aytib beradi.
O‘rin (Navbat , Ketma ketlik)
Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
52
Bir ifoda qiymati kamida ifodadagi operatorlarini hisoblash tartibidagi qismga
bog‘liq. Quyidagi ifoda ko‘rib chiqaylik:
a + b * c
Faraz qilaylik, o‘zgaruvchilar a, b va c deylik va mos ravishda 3, 4 va 5. Agar
(birinchi qo‘shish, keyin ko‘paytirish) chapdan o‘ngga hisoblansa natija 35. Agar
o‘ngdan chapga hisoblansa natijasi 23 bo‘ladi.
Ifodalardagi operatorlarni oddiygina chapdan o‘ngga yoki o‘ngdan chapga
hisoblash o‘rniga, matematiklar uzoq yillar oldin hisoblash ustuvorligining
ierarxiyasida operatorlarni joylashtirish va qisman bu ierarxiyada ifodalarning
hisoblash tartibini asoslash tushunchasini rivojlantirishgan. Misol uchun,
matematikada ko‘paytirish qo‘shishdan ko‘ra ortiq oliy ustuvor hisoblanadi, ehtimol
uning yuqori darajasi murakkabligi tufaylidir. Agar bu usul oldingi misoldagi ifodaga
qo‘llaniladigan bo‘lsa, ko‘p dasturlash tillaridagi kabi, ko‘paytirish birinchi qilinishi
kerak bo‘ladi.
Ifoda baholash uchun operator ustunlik qoidalari, turli darajadagi ustunlikning
operatorlari xisoblash tartibini qisman aniqlaydi. Ifodalar uchun operator qoidalari,
til loyihalari tomonidan ko‘rilgan, operator ustuvorligi ierarxiyasiga asoslangan.
Odatiy imperativ tillarning operator ustunlik qoidalari deyarli barcha bir xil bo‘ladi,
chunki ular o‘sha matematikaga asoslanadi. Bu tillarda, eksponent eng yuqori
o‘ringa (u til tomonidan taqdim qilingan paytda) ega, ortidan ko‘paytirish va bo‘lish,
keyin shu darajada olish binary qo‘shish va ayirish.
Ko‘pchilik tillar qo‘shish va ayirishning unar versiyalarini ham o‘z ichiga
oladi. u bir terimli Kiritilgan identifikatsiya operatori deb ataladi , chunki u odatda
hech qanday bog‘liqlik amali yo‘q va shu tariqa uning operand ustida hech qanday
ta’siri yo‘q. Ellis va Stroustrup (1990, bet 56), S ++ haqida gapirib, uni tarixiy halokat
deb ataydi va uni foydasizligini ko‘rsatib beradi. Unar minus, albatta, o‘zining
operandi belgisini o‘zgartiradi. Shuningdek, Java va S# da, unar minus, short va bayt
operandlarining int turiga mutloq konvertatsiyasiga sabab bo‘ladi.
Barcha odatiy imperativ tillarda, unar minus operatori , modomiki u qavslar
bilan ajratilib boshqa operatorlar yonida bo‘lishdan oldini olinar ekan, ifodaning yo
boshida yo istagan joyida ko‘rinishi (paydo bo‘lishi) mumkin. Masalan,
a + (- b) * c
bo‘lgan to‘g‘ri (legal), lekin
a + - b * c
odatda to‘g‘ri emas.
Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
53
Keyingi, quyidagi ifodalarni ko‘rib:
- a/ b
- a * b
- a ** b
Birinchi ikki hollarda, unar minus operator va ikkilik operatorning nisbiy
ustunligi ikki operatorlar baholash tartibining ifoda qiymatiga ta’siri yo‘q. Oxirgi
holatda, biroq, u muhim emas.
Umumiy dasturlash tillarining, faqat Fortran, Ruby, Visual Basik va Ada
eksponention operatori bor. Barcha to‘rtalasida,eksponention unar minusdan yuqori
ustunlikka ega, shuning uchun
- A ** B teng bo‘ladi - (A ** B)
Ruby va S asoslangan tillarda arifmetik amalar ketma-ketligi quyidagicha:
.
Ruby
S-asoslangan tillar
Eng birinchi **
postfix ++, --
.
unar +-
prefix ++,--, unar + , -
.
*,/,%
*,/,%
Eng oxirgi
binary +,-
binary +,-
|