DatoriProgrammatūra

RPN: algoritms, metodes un piemēri

RPN reiz kļuva par pamatu datoru programmētājs pasaulē. Šodien tas nav tik labi zināms. Tāpēc, komiksu ilustrācija, attēlojot "reverse" poļu desu ruļļos ārpuses, joprojām var pārprast dažas zinošu programmētāji. Ne visai labi izskaidrotu joks, bet šajā gadījumā tas būs pilnībā pamatota.

iestiprināt

Visi programmētāji, un lielākā daļa studentu ir iepazinušies ar lietošanas operatoru. Piemēram, izteiksme x + sasummēt vērtības mainīgajiem lielumiem x un y lietota plus zīmi. Mazāk zināms ir fakts, ka tas ir aizgūts no matemātikas apzīmējums, ko sauc iestiprināt apzīmējums, patiesībā, ir liela problēma ar mašīnām. Šis operators saņem kā ievades divas vērtības tiek ierakstītas pa kreisi un pa labi. Šajā plānošanas apzīmējums izmantots izvēles ar zīmes darbības. Piemēram, x + y var rakstīt kā funkcija no ekrānā (x, y), kurā kompilators un galu galā pārveido infikss pierakstu. Tomēr visi zina aprēķini ir pārāk labi, nelietot aritmētiskas izteiksmes, kas veido sava veida iekšējās mini valodā gandrīz katrā programmēšanas valodā.

formula tulkotājs

Pirmais patiešām veiksmīga Fortran programmēšanas valoda ir kļuvusi tik lielā mērā, jo aritmētiskais izteiksme (ti, formula ..) To konvertē (apraide) kodu, līdz ar to nosaukumu no tā - Formula tulkošana. Pirms tam viņiem nācās rakstīt, piemēram, salocītā veidā funkciju (un vairoties (b, c)). COBOL problēma īstenošanas automātiskās konvertēšanas formulas tika uzskatīts par ļoti grūti, jo programmētājiem vajadzēja rakstīt lietas, piemēram, Pievienot A uz B Mutliply C.

Kas ir nepareizi ar infikss?

Problēma ir tā, ka uzņēmēji ir tādas īpašības kā prioritāti un Saistījuma. Sakarā ar to, definīcija infikss funkcija kļūst par ne-trivial uzdevums. Tā, piemēram, vairošanās ir augstāka prioritāte nekā saskaitīšanas vai atņemšanas, kas nozīmē, ka izteiksme 2 + 3 * 4 nav vienāda ar summu 2 un 3, kas reizināts ar 4, jo tas būtu pildot operatoru no kreisās uz labo pusi. Faktiski, reizināt 3 līdz 4 un pievienot 2. Šis piemērs parāda, ka, aprēķinot infikss izteiksmes bieži prasa izmaiņas kārtībā operatoru un operandiem. Turklāt, tas ir nepieciešams, lai izmantotu bikšturi izskatās vairāk skaidrs pierakstu. Piemēram, (2 + 3) * (4 + 5), var būt rakstīts bez iekavās, jo 2 + 3 * 4 + 5 nozīmē, ka jums ir nepieciešams, lai reizināt 3 līdz 4 un pievienot 2 un 5.

Kārtība, kādā vēlaties, lai aprēķinātu operatoriem prasa ilgu atcerēties. Sakarā ar to, studenti, kuri sāk mācīties aritmētisko, bieži vien iegūt nepareizus rezultātus, pat tad, ja faktiskie darbības tiek veiktas pareizi. Tas ir nepieciešams, lai mācītu kārtību darbības pārskatu ar sirdi. Pirmkārt, prasība ir jāveic iekavās, tad reizināšanas un dalīšanas, un, visbeidzot, saskaitīšanu un atņemšanu. Bet ir vēl viens veids, kā rakstot matemātiskās izteiksmes, kā iestiprināt apzīmējums ir tikai viens no iespējamiem "mazo valodu", kas var pievienot vairāk.

Prefikss un postfix notācija

Divi no pazīstamākajiem alternatīvām ir reģistrēt operatoram pirms vai pēc tās operandiem. Tie ir pazīstami kā prefiksu un sufiksu pierakstā. Loģiķis Yan Lukasevich izgudroja pirmo vienu 1920. Viņš dzīvoja Polijā, tāpēc ieraksts sauc poļu. Postfix versija, attiecīgi, ko sauc reverse poļu notācija (ARF). Vienīgā atšķirība starp šīm divām metodēm, ir virziens, kurā lasīt ierakstu (no kreisās uz labo vai no labās uz kreiso), tāpēc tas ir pietiekami, lai varētu sīki tikai viens no tiem. OPN operators ir rakstīts pēc tās operandiem. Tādējādi, jēdziens AB + ir piemērs RPN A + B

Neierobežots skaits operandiem

Tūlītēja priekšrocība notācija ir tas, ka ir apkopoti n-adic operators un iespraust apzīmējums tiešām darbojas tikai ar diviem operandiem, t. E. Vai būtības piemērots tikai bināro operāciju. Piemēram, ABC @ ir apgrieztā poļu izteiciens izmantojot trīs valstu zīmi, kas ir maksimālā vērtība A, B un C. Tādā gadījumā operators darbojas pa kreisi no pašas trīs operandu un atbilst funkcijai zvana @ (A, B, C). Ja jūs mēģināt rakstīt @ simbolu kā iespraust, piemēram, A @ BC vai kaut kas tamlīdzīgs, kļūst skaidrs, ka tas vienkārši nedarbojas.

Prioritāte devusi rīkojumu

RPN ir vēl viena priekšrocība, ka prioritāte operatori var attēlot ar to secību. Tajā pašā laikā nekad nav breketes, lai gan tie var tikt iekļauti kā rakstzīmes darbības, lai atvieglotu pāreju no infikss pierakstā. Piemēram, AB + C * - nepārprotams ekvivalents (A + B) * C, tā reizināšanas nevar aprēķināt, kamēr papildus darbībām, kas dod otro operanda reizināšanas. Tas ir, ja aprēķinātais AB + C * viens operators vienlaicīgi, mēs AB + C * -> (AB +) * C -> (A + B) * C.

aprēķinu algoritms

OPN Operators izskatās tāds pats kā funkciju, kas notiek kā argumenti divas vērtības rakstīts uz viņas pusē. Turklāt, tas ir dabiski apzīmējums lietošanai programmēšanas valodām, kā to aprēķināšanas atbilst kaudze operāciju, un ir novērsta nepieciešamība pēc parsēšana. Piemēram, aizturētājs izteicienā 5 + 6 * 7 parādīsies kā 5, 6, 7 * +, un tas var aprēķināt vienkārši skenēšana no kreisās uz labo pusi un rakstīt vērtības kaudze. Ikreiz, operators tiek izmantots kopīga pazīme darbības, ko izvēlas no datora atmiņā augšējā elementa 2 un rezultāts atgriezās atmiņā. Kad gala rezultāts aprēķina izteiksmes būs augšpusē kaudze.

Piemēram:

  • S = () 5, 6, 7, *, + 5 laist kaudze.
  • S = (5) 6, 7, *, + 6 laist kaudze.
  • S = (5, 6), 7 *, 7 + novietot stack.
  • S = (5, 6, 7), * 2 + izvēlēties vērtības no skursteņiem, izmantot * un ievietot rezultātu kaskādē.
  • S = (5, 6 * 7) = (5, 42) + 2 vērtībām, kas atlasītas no skursteņiem, piemērot + un nodot radīt kaskādē.
  • S = (5 + 42) = (47) aprēķināšana ir pabeigta, rezultāts tiek saglabāts augšpusē kaudze.

Šis algoritms var pārbaudīt RPN atkārtoti, bet katru reizi, kad tas strādā, neatkarīgi no tā, cik sarežģīts aritmētisko izteiksmi.

OPN un skursteņi ir cieši saistītas. Šis piemērs parāda, kā izmantot atmiņu, lai aprēķinātu vērtību apgrieztā poļu pierakstā. Mazāk skaidrs ir tas, ka var izmantot stack, pārvērst standarta iestiprināt ekspresiju akūta nieru mazspēja.

Piemēri programmēšanas valodas

Pascal RPN saprata kā šis (parāda programmas daļu).

Lai lasītu numurus un uzņēmējus ciklā sauc kārtība, kas nosaka, vai marķiera numuru vai zīmi darbību. Pirmajā gadījumā vērtība glabājas kaudze, un otrais no diviem augšējiem steka numuriem atbilstošās darbības tiek veiktas, un rezultāts tiek saglabāts.

toktype: = num;

lasīt (s);

ja c in [ '+' '-' '*', '/'], tad sākas

ja eoln tad cn: = '' cits lasīt (cn);

ja cn = '' tad

Gadījumā, ja

"+": Toktype: = pievienot; '-': toktype: = sub;

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

beigas

cits sāk

ja a = '-' pēc tam SGN: = -1 cits kļūda: = c <> '+';

ar: = cn

beigas

galu;

ja (nav kļūda) un (toktype = num) tad getnumber;

ja toktype <> num tad sākas

y = pop; x: = pop;

ja ne kļūda, tad

case toktype no

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

beigas

push (z);

C-īstenošana RPN (redzams daļa no programmas):

par (S = strtok (s, w), s; s = strtok (0, w)) {

a = strtod (s, un e);

ja (e> s) push (a);

#define rpnop (x) printf ( "% c:", * s), b = pop (), a = pop (), push (x)

else if (* s == '+') rpnop (a + b);

else if (* s == '-') rpnop (a - b);

else if (* s == '*') rpnop (a * b);

else if (* s == '/') rpnop (a / b);

#undef rpnop

}

aparatūras implementācijas

Šajās dienās, kad dators tehnoloģija bija ļoti dārgi, tas tika uzskatīts, laba ideja, lai piespiestu cilvēkus izmantot izlādņi. 1960.-tajos gados., Kā tagad, bija iespējams iegādāties kalkulatorus, kas strādā apgrieztā poļu pierakstā. Lai pievienotu 2 un 3 no tiem ir jāievada 2, tad 3, un nospiediet "plus" pogu. Pēc pirmā acu uzmetiena, ieejas operandiem operatoram likās sarežģīti un grūti atcerēties, bet pēc kāda laika daži ir atkarīgi no šo domāšanas veidu un nevarēja saprast, kāpēc citi uzstāt uz stulba infikss, kas ir tik sarežģīta, un tā ir ierobežota.

Burroughs kompānija pat uzbūvēta lieldatoru, kurai nebija citas atmiņu, izņemot kaudze. Vienīgais, kas padara mašīnas - piemēroja algoritmi un metodes RPN centrālajai kaudze. Visas tās darbību, tika uzskatīti par novadītāji operatori, kas attiecas uz augšējiem n vērtībām. Piemēram, komanda paņēma atpakaļadresi no augšas kaudze, un tā tālāk. D. šāda mašīna arhitektūra bija vienkārša, bet ne pietiekami ātri, lai konkurētu ar biežāk arhitektūrām. Daudzi tomēr joprojām nožēlu par to, ka šāds vienkāršs un elegants pieeja skaitļošanas kur katrs programma bija izpausme OPN, atrasti tās turpināšanu.

Vienu reizi kalkulatori ar RPN bija populārs, un daži cilvēki joprojām dod viņiem priekšrocības. Turklāt, viņi izstrādāja kaudzīti orientētas valodās, piemēram, tālāk. Šodien tā ir mazlietotas, bet joprojām nostalģiska no viņa bijušajiem lietotājiem.

Tātad, kāda ir nozīme joki par Reverse poļu desa?

Ja mēs pieņemam, ka operators desas, tad iespraust apzīmējums, tas būtu tajā sarakstā kā parasto cīsiņš. RPN atrodas tieši divas puses get ready bīdstie pēc aprēķiniem. Tagad nāk grūti daļa - sinepes. Viņa jau ir par desu, t. E. jau aprēķināti kā unāro operators. Tiek uzskatīts, ka sinepes ir arī parādīts kā uncalculated un tādēļ ir jāpārvieto uz labajā pusē desas ... Bet tas ir iespējams, tas prasītu pārāk lielu kaudzi ...

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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