KompiuteriaiPrograminė įranga

RPN: algoritmas, metodai ir pavyzdžiai

RPN kartą suformavo programuotojas pasaulyje pagrindas. Šiandien tai nėra taip gerai žinomas. Todėl komiška iliustracija, vaizduojanti "atvirkštinio" Lenkijos dešra ritiniais lauke, vis dar gali būti neteisingai suprastas kai kurie nusimano programuotojų. Ne labai gerai paaiškinti anekdotą, tačiau šiuo atveju tai bus visiškai pateisinamas.

intarpas

Visi programuotojai, ir dauguma studentų yra susipažinę su operatorių naudojimui. Pavyzdžiui, išraiška x + sumavimo parametrų kintamųjų x ir y naudotų pliuso ženklu. Mažiau žinomas faktas, kad tai yra pasiskolintas iš matematikos notacijos, vadinamas Infix žymėjimas, iš tiesų, yra didelė problema mašinos. Šis operatorius gauna kaip įvesties dvi reikšmės yra įrašytas į kairę ir į dešinę. Programavimo žymėjimas naudojamas pasirinktinai su ženklais operacijas. Pavyzdžiui, X + Y gali būti parašytas kaip kartų (x, y) funkcija, kurioje sudarytojas ir galiausiai paverčia Infix notacijos. Tačiau visi žino, matematika yra per geras nenaudoti aritmetines išraiškas, kurios sudaro vidaus mini kalbos atmainą beveik visose programavimo kalba.

formulė vertėjas

Pirmasis tikrai sėkmingas Fortran programavimo kalba tapo tokia didele dalimi dėl to, kad aritmetinis išraiška (ty formulė ..) Tai konvertuojami (transliacija) kodą, todėl jo vardas - "Formula vertimą. Prieš tai, jie turėjo rašyti, pavyzdžiui, sulenkiama funkcijų forma (ir daugintis (B, C)). Be COBOL problema įgyvendinimo automatinį perskaičiavimo formulė buvo laikomas labai sunku, nes programuotojai turėjo parašyti kažką panašaus Įdėti A į B Mutliply C.

Kas yra negerai su Infix?

Problema yra, kad operatoriai turi tokių savybių, kaip viršenybės ir Association. Dėl šios priežasties, iš Infix funkcijos apibrėžimas tampa ne trivialus uždavinys. Pavyzdžiui, daugyba turi didesnę pirmenybę, nei to ar atimties, o tai reiškia, kad sąvoka 2 + 3 * 4 nėra lygi 2 ir 3 sumai, padaugintai iš 4, nes tai būtų operatorių veiklos iš kairės į dešinę. Tiesą sakant, dauginti 3 iš 4 ir pridėti 2. Šis pavyzdys iliustruoja, kad Infix išraiškos skaičiavimas dažnai reikia į operatorių ir operandų tam kaita. Be to, būtina naudoti petnešos atrodyti aiškų žymėjimą. Pavyzdžiui, (2 + 3) * (4 + 5), negali būti parašyta be skliausteliuose, nes 2 + 3 * 4 + 5 reiškia, kad jums reikia padauginti 3 iš 4 ir pridėti 2 ir 5.

Tvarka, kuria norite apskaičiuoti operatoriai reikalauja ilgas atsiminti. Dėl to, studentai, kurie pradeda mokytis aritmetikos, dažnai gauti neteisingus rezultatus, net jei faktiniai operacijos atliekamos tinkamai. Būtina mokyti veiksmų ataskaitose tvarką atmintinai. Pirma, ieškinys turi būti atliekamas skliausteliuose, tada daugybos ir dalybos, ir galiausiai to ir atimties. Bet yra ir kita raštu matematines išraiškas kaip Infix notacija yra tik vienas iš galimų "mažų kalbų", kuri gali būti dedama daugiau būdų.

Prefiksas ir postfix žymėjimas

Dvi iš labiausiai žinomų alternatyvų yra prieš arba po jos operandai įrašyti operatorių. Jie yra žinomi kaip priešdėlis ir postfix žymėjimo. Logikas Yan Lukasevich išrastas pirmasis 1920. Jis gyveno Lenkijoje, todėl įrašas yra vadinama Lenkijos. Postfix versija, atitinkamai, vadinamas Grįžtamieji Lenkijos Žymėjimai (ARF). Vienintelis skirtumas tarp šių dviejų metodų yra, kurioje skaityti įrašą (iš kairės į dešinę arba iš dešinės į kairę) kryptis, todėl ji pakanka išsamiai apsvarstyti tik vienas iš jų. OPN operatorius parašyta po jo operandų. Taigi, išraiška AB "+ reiškia pavyzdį RPN A + B

Neribotas skaičius operandų

Nedelsiant privalumas notacijos yra tai, kad apibendrina N-ADIC operatorių ir Infix notacija yra tikrai tik dirba su dviem operandų t. E. yra iš prigimties tinka tik binarinių operacijų. Pavyzdžiui, ABC @ yra atvirkštinės Lenkijos išraiška naudojant triadine ženklą, kuris yra didžiausia vertė iš A, B ir C Šiuo atveju operatorius veikia dėl paties trijų operando kairėje ir atitinka į skambinimo funkcijos @ (A, B, C). Jei bandote rašyti @ simbolį kaip Infix, pavyzdžiui, @ BC ar kažką panašaus, kad tampa aišku, kad ji tiesiog neveikia.

Suteiktas prioritetas tvarka

RPN turi kitą pranašumą, kad ūkio subjektų prioritetas gali būti atstovaujama pagal jų išvaizdą tvarka. Tuo pačiu metu niekada nereikia petnešos, nors jie gali būti įtraukti kaip simbolių operacijos palengvinti konversiją iš Infix žymėjimo. Pavyzdžiui, AB "+ C * - nedviprasmiški ekvivalentas (A + B) * C, todėl dauginimasis negali būti skaičiuojami iki to atlikto, kuris suteikia antrą operando išrinkimą dauginimo. Tai yra, jei apskaičiuota AB "+ C * vienas operatorius vienu metu, mes gauname AB + c * -> (AB" +) * C -> (A + B) * C

skaičiavimo algoritmas

OPN operatorius atrodo taip pat kaip funkcija, kad mano, kaip argumentai dviejų verčių parašyta ant kairės. Be to, ji yra natūralus žymėjimas naudoti programavimo kalbomis, kaip jos apskaičiavimo būdas atitinka kamino operacijų ir už apdorojant poreikis yra eliminuojami. Pavyzdžiui, į išraiškos 5 + 6 * 7 stabdiklis bus rodomi kaip 5, 6, 7 *, +, ir ji gali būti apskaičiuotas tiesiog nuskaitymo iš kairės į dešinę ir rašyti reikšmes kamino. Kai bendra ženklas operaciją, pasirinktas viršutinio elemento 2 kompiuterio atmintyje, operatorius naudojamas ir rezultatas grąžinamas į atmintį. Kai galutinis rezultatas skaičiavimo išraiškos bus kamino viršaus.

Pavyzdžiui:

  • S = () 5, 6, 7, *, + 5 patalpintas kamino.
  • S = (5) 6, 7, *, + 6 patalpintas kamino.
  • S = (5, 6), 7 *, 7 + įdėti kamino.
  • S = (5, 6, 7), * 2 + pasirinkti vertes iš kamino, naudojimas * ir vieta rezultatą kamino.
  • S = (5, 6 * 7) = (5, 42) + 2 reikšmėmis, parinktas iš kamino, taikyti + ir davė rezultatą kamino.
  • S = (5 + 42) = (47) skaičiavimas baigiamas, rezultatas yra saugomi kamino viršuje.

Šis algoritmas gali būti patikrintas RPN kartą, bet kiekvieną kartą, kai jis dirbs, nesvarbu, koks sudėtingas aritmetinis išraiška.

OPN ir kaminai, yra glaudžiai susiję. Šis pavyzdys rodo, kaip naudotis atminties apskaičiuoti atvirkštine Lenkijos žymėjimo vertę. Mažiau akivaizdu yra tai, kad galite naudoti kamino, konvertuoti standartinį Infix išraišką ūminis inkstų nepakankamumas.

Pavyzdžiai programavimo kalbų

Pascal RPN supratau, kaip tai (parodo programos dalis).

Skaityti numerius ir operatoriai cikle vadinamas procedūra, kuri nustato, ar simbolinį skaičių arba gestų operaciją. Pirmuoju atveju, vertė saugomi kamino, o du viršutiniai kamino numeriai atitinkamą veiksmų antroji atliekama ir rezultatas yra saugomi.

toktype: = num;

skaityti (-ai);

jei C [ "+", "-", "*", "/"] tada pradėti

jei eoln tada CN: = '' kitur skaityti (CN);

jei cn = '' tada

atveju

"+": Toktype: = Pridėti; '-': toktype: = sub;

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

pabaiga

kita pradėti

jei = '-' tada sign: = -1 kitur klaidų: = C <> "+";

su: = CN

pabaiga

galų;

jei (ne klaida) ir (toktype = num), tada getnumber;

jei toktype <> num tada pradėti

Y = Pop; x: = Pop;

jei ne klaida tada

atveju toktype iš

pridėti: Z: = x + y; Sub: Z: = X-Y; mul: Z: = x * y; div: Z: = x / y

pabaiga

stumti (Z);

C įgyvendinimas RPN (rodoma programos dalis):

už (-ų = strtok (S, W); S; S = strtok (0, t) srityje) {

a = strtod (S, & E);

jei (E> -ai) stumti (A);

#define rpnop (X) printf ( "% c", * -ai), b = Pop () A = Pop (), stumti (X)

kitas, jei (* s == "+") rpnop (a + b);

kitas, jei (* s == '-') rpnop (a - b);

kitas, jei (* s == "*") rpnop (a * b);

kitas, jei (* s == '/') rpnop (a / b,);

#undef rpnop

}

aparatūros diegimas

Tomis dienomis, kai kompiuterinės technologijos buvo labai brangus, buvo manoma, gera idėja priversti žmones naudotis Viršįtampių ribotuvai. 1960-ųjų metų., Kaip ir dabar, buvo galima nusipirkti skaičiuotuvai, kurie dirba atvirkštine Lenkijos žymėjimo. Norėdami pridėti 2 ir 3 iš jų reikia įvesti 2, tada 3, tada spauskite "plius" mygtuką. Iš pirmo žvilgsnio, įvesties operandai į operatoriaus atrodė sudėtinga ir sunku prisiminti, bet po kurio laiko kai yra priklausomi nuo šio mąstymo būdas ir negalėjo suprasti, kodėl kiti primygtinai kvailas Infix, kuri yra taip sudėtinga ir taip yra ribotas.

Burroughs bendrovė net pastatė Universalieji kompiuteriai, kuris neturėjo kito atminties, išskyrus kamino. Vienintelis dalykas, kuris daro mašiną - taikomi algoritmai ir metodai RPN į centrinę kamino. Visų savo operacijų buvo laikomas iškrovikliai operatorių, taikomą viršutinių n reikšmėmis. Pavyzdžiui, komanda užėmė atgalinis adresas nuo kamino viršaus, ir pan. D. tokio aparato architektūra buvo paprastas, bet ne pakankamai greitai konkuruoti su daugiau bendrų struktūrų. Daugelis, tačiau vis dar apgailestauju, kad toks paprastas ir elegantiškas požiūris į kompiuterių, kur kiekviena programa buvo iš OPN išraiška, rado savo tęstinumą.

Vienkartiniai skaičiuotuvai su RPN buvo populiarus, ir kai kurie žmonės vis dar suteikti jiems pirmenybę. Be to, jie sukūrė kamino orientuotas kalbas, pavyzdžiui, kt. Šiandien ji yra mažai naudojamas, bet vis dar nostalgija iš savo buvusių vartotojams.

Taigi, kas yra prasmė anekdotai apie Grįžtamieji Lenkijos dešra?

Jei mes manome, kad dešra operatorius, Infix žymėjimas, tai turėtų būti per ritinio kaip įprastiniame karšto šuo. RPN yra tiesiai į dvi dalis Ruoškitės flanšų po apskaičiavimą. Dabar ateina sunkiausia dalis - garstyčių. Ji jau yra dešros, T. E. Jau apskaičiuojamas kaip unarinį operatorius. Manoma, kad garstyčios taip pat turėtų būti rodomas kaip uncalculated ir todėl turėtų būti perkeltos į dešros dešinės ... Bet tai yra įmanoma, tai reikalauja per daug krūvą ...

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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