Misol: teskari jilo belgisidagi kalkulyator




Download 187.35 Kb.
bet8/18
Sana31.01.2023
Hajmi187.35 Kb.
#40306
1   ...   4   5   6   7   8   9   10   11   ...   18
Bog'liq
C da yarimstatik ma\'lumotlar tuzilmasi ifodalash navbat
Klaviatura, Loyiha, Elеktromagnit tizimli asboblar., YOSH XIVALIKLAR, Simsiz aloqa tizimlarida axborot resurslarini himoyalash-fayllar.org, BAHOLASH MEZONLARI, 7-mavzu. Parallel ulash (3), 152371477 (1), 152371477 (2), Amaliy matematika va informatika kafedrasi, 1-Amaliy mashg`ulot Matnli hujjatlarni formatlash va, Informatika. 6-sinf (2017, B.Boltayev, M.Mahkamov), Mustaqil ish
Misol: teskari jilo belgisidagi kalkulyator
Stackdan foydalanishning klassik misoli teskari polyak tilidagi kalkulyator yoki postfiks yozuvidir. Unda operator uning operandlaridan keyin yoziladi. Ya'ni, biz yozamiz:

an'anaviy o'rniga:

Boshqacha qilib aytganda, "4 + 2" o'rniga "4 2 +" yozamiz. Agar siz teskari polyak yozuvining kelib chiqishi va uning nomi bilan qiziqsangiz, bu haqda bilib olishingiz mumkinVikipediyayoki qidiruv tizimida.
Polsha yozuvining teskari yozuvi qanday hisoblanganligi va uni ishlatishda stek nima uchun juda foydali ekanligini quyidagi algoritmdan aniq ko'rish mumkin:
uchunhar bir kirish qiymati
agarqiymat butun sondir
qiymatni operandlar stekiga suring
boshqa agarqiymat operator hisoblanadi
stekdan chap va o'ng qiymatlarni oching
operatorni baholang
natijani stekga suring
stekdan pop javob.
Ya'ni, "4 2 +" iborasi uchun harakatlar quyidagicha bo'ladi:
Durang(to'rtta)
Durang(2)
Durang(pop() + pop())
Oxirida stekda bitta qiymat bo'ladi - 6.
Quyida konsoldan ifodani (masalan, 4 2 +) o‘qiydigan, kiritilgan ma’lumotlarni bo‘sh joylarga (["4", "2", "+"]) ajratadigan va hisoblash algoritmini bajaradigan oddiy kalkulyatorning to‘liq kodi keltirilgan. . Hisoblash, chiqish so'ziga duch kelmaguncha davom etadi.
bekorRpnLoop()
{ esa (rost)
{Konsol.Yozing(">");
string kiritish=Konsol.o'qish qatori();
agar (kiritish.kesish().Quyi minora() == "chiqish")
{
tanaffus;
}
// Hali qayta ishlanmagan qiymatlar to'plami.
Stack qiymatlari= yangi Stak();

har biriga(string tokenichidakiritish.Split(yangi char[] { '' }))


{
// Agar qiymat butun son bo'lsa...
int qiymati;
agar (int.TryParse(token,qiymatdan tashqari))
{
// ... uni stakka qo'ying.
qiymatlar.Durang(qiymat);
}
boshqa
{
// aks holda operatsiyani bajaring...
int rhs=qiymatlar.Pop();
int lhs=qiymatlar.Pop();

// ... va natijani orqaga qaytaring.


almashtirish(token)
{
hol"+":
qiymatlar.Durang(lhs+rhs);
tanaffus;
hol"-":
qiymatlar.Durang(lhs-rhs);
tanaffus;
hol"*":
qiymatlar.Durang(lhs*rhs);
tanaffus;
hol"/":
qiymatlar.Durang(lhs/rhs);
tanaffus;
hol"%":
qiymatlar.Durang(lhs%rhs);
tanaffus;
standart:
// Agar operatsiya +, -, * yoki / bo'lmasa
tashlash yangi ArgumentException(
ip.Format("Notanish token: {0}",token)))
} } }
// stekdagi oxirgi element natijadir.
Konsol.Yozish qatori(qiymatlar.Pop());
}}



Download 187.35 Kb.
1   ...   4   5   6   7   8   9   10   11   ...   18




Download 187.35 Kb.

Bosh sahifa
Aloqalar

    Bosh sahifa



Misol: teskari jilo belgisidagi kalkulyator

Download 187.35 Kb.