KompyuterlarDasturiy ta'minot

RPN: algoritm, usullari va misollar

RPN marta dunyoda kompyuter programcısı asosini tashkil etdi. Bugun u juda yaxshi ma'lum emas. Shuning uchun, comic masal, tashqarida bir "teskari" Polsha kolbasa rolls tasvirlangan, hali ba'zi bilimdon dasturchilar tomonidan noto'g'ri talqin qilinishi mumkin. Emas, balki juda yaxshi hazil tushuntirib, lekin bu holda to'liq haqli bo'ladi.

infix

Barcha Dasturchilar, va eng talabalar operatorlari foydalanish bilan tanish. Misol uchun, o'zgaruvchilar x va y Ishlatilgan ortiqcha belgi uchun ifoda x + yig'ish qiymati qadriyatlar. Kam ta'minlangan, bu aslida, mashinalari uchun katta muammo hisoblanadi, infix qayd chaqirdi matematika namoyish, qarz olingan haqiqatdir ma'lum. Kirish ikki qadriyatlar chap va o'ng qayd etiladi Bu operator qabul qildi. dasturlash yilda qayd alomatlar operatsiyalari bilan, ixtiyoriy ravishda ishlatiladi. Masalan, x + y oxir-oqibat tuzuvchi va infix namoyish aylantirgan bo'lgan barobar (x, y) bir funktsiyasi, deb yozilgan bo'lishi mumkin. Biroq, har bir matematik deyarli har bir dasturlash tilida ichki mini-tilida bir turdagi shakllantirish arifmetik ifodalar, foydalanish uchun emas, balki juda yaxshi biladi.

formula tarjimon

birinchi, albatta, muvaffaqiyatli Fortran dasturlash tili aylangan, shuning uchun asosan, chunki kodi (efirga) aylanadi arifmetik ifoda (ya'ni formula ..), bu shuning nomi - Formula tarjima. Bungacha ular, masalan, yozish funktsiyalari shaklida buklangan kerak edi ((ko'payinglar b, c)). Dasturchilar S B Mutliply A qo'shish kabi narsalarni yozish kerak edi, chunki avtomatik aylantirish formulasini amalga oshirish COBOL muammo juda qiyin hisoblangan

infix bilan noto'g'ri nima?

muammo operatorlari birinchi o'ringa, birlashish kabi xususiyatlarga ega deb hisoblanadi. Shu sababli, infix funktsiyasi ta'rifi non-arzimas vazifa bo'lib qoladi. Misol uchun, ko'paytirish u chapdan o'ngga operatorlari bajarish bo'lishi kabi ifoda 2 + 3 * 4, 4 ko'paytiriladi 2 va 3 summasi, teng emas, degan ma'noni anglatadi qo'shish yoki olib tashlash yanada yuqori ustunlikka ega. Aslida, 4 3 ko'paytirib va bu misol infix so'z hisoblash ko'pincha operatorlari va operanddan tartibda o'zgarishini talab qiladi, deb ko'rsatilgan 2. qo'shing. Bundan tashqari, u yanada aniq namoyish qarash qo'shtirnoq foydalanish lozim. 2 + 3 * 4 + 5 4 3 ko'paytirib va 2 va 5-kiritish kerak, degan ma'noni anglatadi, chunki, masalan, (2 + 3) * (+ 5 4), Qavslar holda yozilgan bo'lishi mumkin emas.

Agar operatorlari hisoblash uchun kerakli bo'lgan buyruq uzoq esimda talab qiladi. Shu sababli, ko'pincha, arifmetik o'rganish boshlanadi talabalar haqiqiy operatsiyalar to'g'ri amalga bo'lsa ham, noto'g'ri natija olish. Bu yurak bilan harakat bayonotlari tartibini o'rgatish zarur. Birinchidan, harakat, Qavslar, so'ngra ayirish va bo'lish, va nihoyat yig'ish va olib tashlash amalga oshirilishi kerak. Lekin infix qayd faqat yana qo'shib mumkin mumkin "kichik tillari" biri sifatida matematik ifodalarini yozib yana bir yo'li bor.

Old va postfix qayd

eng taniqli muqobil ikki oldin yoki uning operanddan keyin operatori yozib iborat. Ular prefiks va postfix namoyish sifatida ma'lum. Mantıkçı Yan Lukasevich 1920 yilda birinchi ixtiro. U Polshada yashagan, shunday rekord Polsha deyiladi. O'chadigan versiyasi, o'z navbatida, Teskari polyakcha yozuv (Urf) deb ataladi. Bu batafsil ulardan faqat bittasini ko'rib kifoya, shuning uchun bu ikki usullari orasidagi yagona farq, (o'ng yoki o'ng chap chapdan) rekord o'qishni yo'nalishi hisoblanadi. OPN operatori o'z operanddan keyin yoziladi. Shunday qilib, ifoda AB + A + B misol RPN ifodalaydi

operanddan cheksiz ko'p

namoyish bevosita afzalligi u n-adic operatori jamlab, deb va infix qayd ikkita operanddan bilan ishlaydi faqat, albatta, t. E. faqat ikkilik operatsiyalar uchun tabiatan mos. Misol uchun, ABC @ operatori uch operand o'zi chapda bajaradi, bu holda A, B va C maksimal qiymati va bir vazifani chaqiruv @ uchun mos keladi triadic belgisini foydalanib teskari Polsha ifodasidir (A, B, C). Agar bunday bunday @ eramizdan avvalgi yoki narsa sifatida infix, deb @ belgisini yozish uchun harakat bo'lsa, u shunchaki ish emas, ochiq-oydin bo'ladi.

tartibda tomonidan berilgan ustuvor

RPN operatorlari ustuvor ularning ko'rinishi buyrug'i bilan tasvirlaydi mumkin, deb yana bir afzalligi ham bor. belgilar operatsiyalar infix sanoq sistemasida o'tkazishda ko'maklashish uchun, ular kiritilgan bo'lishi mumkin bo'lsa-da, bir vaqtning o'zida, qo'shtirnoq kerak hech qachon. Misol uchun, AB + C * - aniq ekvivalent (A + B) * C, ayirish ayirish uchun ikkinchi operandi beradi amalga Bundan, qadar hisoblab bo'lmaydi, shuning uchun. > (AB +) * C - -> (A + B) * S hisoblash AB + C * Bir vaqtning o'zida bir operator tomonidan, biz AB + C * bo'lsin, agar Ya'ni

hisoblash algoritmi

OPN operatori vajlari ikki qadriyatlar uning chap yozilgan bo'lib oladi, vazifaga bir xil ko'rinadi. uni hisoblash usul to'p operatsiyalar mos keladi va ajralish uchun ehtiyoj bartaraf kabi Bundan tashqari, u, dasturlash tillarida foydalanish uchun tabiiy qayd etadi. Misol uchun, so'z, 5 + 6 * 7 yashin qaytargich 5, 6, 7 *, + sifatida paydo bo'ladi, va chapdan o'ngga, u skanerlash tomonidan oddiygina hisoblanishi mumkin va bir qorishmasidan qadriyatlarni yozish. kompyuter xotirasiga yuqori element 2 tomonidan tanlangan ishga umumiy belgisi, operator ishlatiladi va har natija xotiraga qaytdi. Qachon hisoblash so'z oxiri natija suyakka yuqori bo'ladi.

Misol uchun:

  • S = () 5, 6, yığında joylashtirilgan 7, *, + 5.
  • yığında joylashtirilgan S = (5) 6, 7, *, + 6.
  • S = (5, 6), 7 * 7 + otryadi qo'y.
  • S = (5, 6, 7), * 2 + to'p, Foydalanish * dan qadriyatlarni tanlash va suyakka natija joylashtirish.
  • S = (5, 6 * 7) = (5, 42) + + amal va suyakka natija qo'yish, suyakka tanlab olingan 2 qiymatlar.
  • S = (+ 42 5) = (47) hisoblash yakunlandi, natija ko'plab yuqori saqlanadi.

Bu algoritm bir necha marta RPN tekshirish mumkin, lekin har safar u qanchalik murakkab arifmetik ifoda, ishlaydi.

OPN va g'aram yaqindan bog'liq. Bu, masalan, teskari polyakcha yozuv qiymatini hisoblash uchun xotira qanday foydalanishni ko'rsatib turibdi. Kamroq ravshan siz o'tkir buyrak etishmovchiligi namunaviy infix ifoda aylantirish, suyakka foydalanish mumkin, deb hisoblanadi.

dasturlash tillari misollar

Bu (dasturning qismini ko'rsatadi) kabi Paskal RPN tushundi.

belgi raqami yoki belgisi ishga yoki yo'qligini aniqlaydi tartibi deb atalgan aylanishi, raqamlarni va operatorlari o'qish uchun. Birinchi holda, qorishmasidan saqlangan qiymati va ikki yuqori to'p raqamlari mos harakatlar ikkinchi amalga oshiriladi va natija saqlanadi.

toktype: = Raqam;

(Lar) ni;

v [ '+', '-', '*', '/'] agar keyin boshlanadi

keyin eoln bo'lsa cn: = 'yana o'qib (CN);

Agar cn = 'keyin

bir ishi

"+": Toktype: = kiritish; "-": toktype: = sub;

'*': Toktype: = mul; "/": Toktype: = div

end

yana boshlash

= -1 yana xato:; = c <> '+' '-' keyin sgn bir = bo'lsa

bilan: = cn

end

tugatish;

(Emas, balki xato) va (toktype = Sah) keyin getnumber bo'lsa;

toktype <> Sah keyin boshlanadi, agar

y = pop; x: = pop;

Agar yo'q bo'lsa xato

ishi toktype

kiritish: z: = x + y; sub: z: = x-y; mul: z: = x * y; div: z: = x / y

end

surish (z);

C-amalga oshirish RPN (dasturning ko'rsatilgan qismi):

{(; S V S = strtok (0) s = strtok (lar), w) uchun

a = strtod (s, & e);

Agar (e> s) surish (a);

#define rpnop (x) printf ( "% s", * s), b = pop (), bir = pop (), surish (x)

yana agar (* s == '+') rpnop (a + b);

yana agar (* s == «-») rpnop (a - b);

boshqa (* s == '*') rpnop (a * b) bo'lsa;

yana agar (* s == "/") rpnop (a / b);

#undef rpnop

}

apparat tatbiqiy

O'sha kunlarda, kompyuter texnologiyasi juda qimmat edi, u parafudrlar foydalanish odamlarni majburlash uchun yaxshi fikr qaralar edi. 1960-yillarida., Endi, u teskari polyakcha yozuv ishlash kalkulyatorlar, sotib olish mumkin edi. 2 qo'shish va ularni 3 2, 3 kirishingiz zarur, va "plyus" tugmasini bosing. Birinchi qarashda, operator kirish ishlov berilguniga eslash murakkab va qiyin tuyulardi, lekin bir muncha vaqt o'tgach, ba'zi fikrlash, bu yo'l qaram va boshqalar shunday murakkab va shuning uchun cheklangan ahmoq infix, turib nega tushunish mumkin emas.

Burroughs kompaniyasi ham suyakka tashqari, boshqa hech qanday xotira bor, bir anabilgisayar, qurilgan. mashinasini qiladi yagona narsa - Markaziy suyakka uchun algoritmlar va usullari RPN amaliy. uning barcha operatsiyalar yuqori n qadriyatlarga amal Durdurucular operatorlar, deb qaraldi. Misol uchun, tez-tez arxitektorlar bilan raqobat qilish emas, balki etarlicha tez jamoasi ko'plab yuqori Qaytish Manzil oldi, va hokazo. D. bunday mashina arxitektura oddiy edi, lekin. Ko'pchilik, shu bilan birga, hali ham har bir dastur, OPN bir ifodasidir hisoblash uchun bunday oddiy va nafis yondashuv, uning davomini topgan haqiqatni pushaymon.

RPN hisob bilan bir vaqtda kalkulyatorlar mashhur edi, va ba'zi odamlar hali ularga afzal ber. Bundan tashqari, ular bunday oldinga sifatida to'p yo'naltirilgan tillar, ishlab chiqilgan. Bugungi kunda oz ishlatiladi, lekin uning sobiq foydalanuvchilarning hali nostaljik hisoblanadi.

Shunday qilib, teskari Polsha kolbasa haqida ma'nosi hazillar nima?

Biz kolbasa operatori, infix qayd, u an'anaviy issiq it kabi roll doirasida bo'lishi kerak, deb taxmin bo'lsa. RPN ikki yarmi hisoblash keyin tayyor bas olish o'ng joylashgan. Endi qiyin qismi keladi - xantal. U t, kolbasa ustida allaqachon. E. Allaqachon bir terimli operatori sifatida hisoblab. Bu xantal ham hesaplanamadı sifatida ko'rsatilgan bo'lishi kerak va shuning uchun kolbasa o'ng ko'chib kerak, deb iymon ... Lekin bu mumkin emas, bu juda katta otryadi talab qiladi ...

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 uz.atomiyme.com. Theme powered by WordPress.