CyfrifiaduronMeddalwedd

RPN: algorithm, dulliau ac enghreifftiau

RPN unwaith yn sail rhaglennydd cyfrifiadur yn y byd. Heddiw nid yw'n hysbys mor dda. Felly, darlunio comig, yn darlunio "wrthdroi" rholiau selsig Pwyleg tu allan, yn dal i gael eu camddeall gan rai rhaglenwyr gwybodus. Ddim yn dda iawn yn esbonio y jôc, ond yn yr achos hwn bydd yn cyfiawnhau yn llawn.

infix

Mae pob rhaglenwyr, ac mae'r rhan fwyaf o fyfyrwyr yn gyfarwydd â'r defnydd o weithredwyr. Er enghraifft, mae'r gwerthoedd mynegiad x + Crynodeb gyfer y newidynnau x ac arwydd plws ddefnyddir y. llai adnabyddus yw'r ffaith fod hyn yn cael ei benthyg o fathemateg nodiant, a elwir infix nodiant, mewn gwirionedd, yn broblem fawr ar gyfer y peiriannau. Mae'r gweithredwr yn derbyn fel mewnbwn dau gwerthoedd yn cael eu cofnodi ar y chwith ac i'r dde. Mewn rhaglenni nodiant a ddefnyddir optionally gyda gweithrediadau arwyddion. Er enghraifft, gall x + y cael ei ysgrifennu fel swyddogaeth o gorlan (x, y), lle mae'r compiler ac yn y pendraw yn trosi nodiant infix. Fodd bynnag, mae pawb yn gwybod y math yn rhy dda i beidio â defnyddio ymadroddion rhifyddeg, sy'n ffurfio rhyw fath o mewnol mini-iaith ym mron pob iaith raglennu.

cyfieithydd fformiwla

Mae'r iaith raglennu Fortran wirioneddol lwyddiannus cyntaf wedi dod mor bennaf oherwydd bod y mynegiant rhifyddeg (hy fformiwla ..) yn trosi (darlledu) yn y cod, felly yr enw ohono - FFORMIWLA cyfieithu. Cyn hynny, roedd yn rhaid iddynt ysgrifennu, er enghraifft, plygu ar ffurf swyddogaethau (ac yn lluosi (b, c)). Yn problem COBOL o weithredu fformiwla trosi awtomatig ei ystyried yn anodd iawn oherwydd roedd gan y rhaglenwyr i ysgrifennu pethau fel Ychwanegu At B Mutliply By C.

Beth sydd o'i le ar infix?

Y broblem yw, bod y gweithredwyr yn cael eiddo o'r fath fel blaenoriaeth a associativity. Oherwydd hyn, mae'r diffiniad o swyddogaeth infix yn dod yn dasg heb fod yn ddibwys. Er enghraifft, lluosi Mae blaenoriaeth uwch nag adio neu dynnu, sy'n golygu nad yw'r mynegiad 2 + 3 * 4 yn hafal i swm o 2 a 3, wedi'i luosi â 4, gan y byddai'n fod yn y perfformiad y gweithredwyr o'r chwith i'r dde. Yn wir, lluosi 3 erbyn 4 ac ychwanegu 2. Mae'r enghraifft hon yn dangos bod y cyfrifiad y mynegiant infix yn aml yn gofyn am newid yn y drefn o weithredwyr a operands. Yn ogystal, mae angen i ddefnyddio bresys i edrych nodiant mwy clir. Er enghraifft, ni all (2 + 3) * (4 + 5) yn cael ei ysgrifennu heb y cromfachau, gan fod 2 + 3 * 4 + 5 yn golygu bod angen i chi luosi 3 erbyn 4 ac ychwanegu 2 a 5.

Mae'r drefn y byddwch chi am gyfrifo gweithredwyr yn gofyn am gofio hir. Oherwydd hyn, bydd myfyrwyr sy'n dechrau dysgu rhifyddeg, yn aml yn cael y canlyniadau anghywir, hyd yn oed os yw'r gweithrediadau go iawn yn cael eu perfformio yn gywir. Mae'n angenrheidiol i addysgu'r drefn datganiadau gweithredu ar y cof. Yn gyntaf, rhaid i'r weithred gael ei wneud mewn cromfachau, ac yna lluosi a rhannu, ac yn olaf adio a thynnu. Ond mae yna ffordd arall o ysgrifennu ymadroddion mathemategol fel nodiant infix dim ond un o'r posibl "ieithoedd bach" y gellir eu hychwanegu at mwy.

Rhagddodiad a Postfix nodiant

Mae dau o'r dewisiadau mwyaf adnabyddus yw cofnodi'r gweithredwr cyn neu ar ôl ei operands. Maent yn cael eu hadnabod fel y rhagddodiad a Postfix nodiant. Logician Yan Lukasevich ddyfeisiodd yr un cyntaf ym 1920. Roedd yn byw yng Ngwlad Pwyl, felly gelwir y cofnod yn cael ei Pwyl. Fersiwn Postfix, yn y drefn honno, a elwir Reverse Pwyleg Nodiant (ARF). Yr unig wahaniaeth rhwng y ddau ddull yn y cyfeiriad y i ddarllen y cofnod (o'r chwith i'r dde neu i'r dde i chwith), felly mae'n suffices i ystyried yn fanwl dim ond un ohonynt. Mae'r gweithredwr HGW ei ysgrifennu ar ôl ei operands. Felly, mae'r ymadrodd AB + yn enghraifft RPN ar gyfer A + B.

nifer digyfyngiad o operands

Y fantais uniongyrchol o nodiant yw ei fod yn crynhoi'r gweithredwr n-adic a nodiant infix yn wirioneddol yn unig yn gweithio gyda dau operands, t. E. A yw hanfod addas yn unig ar gyfer gweithrediadau deuaidd. Er enghraifft, ABC @ yw'r mynegiant Pwyl cefn gan ddefnyddio marc triadig sef yr uchafswm o A, B ac C. Yn yr achos hwn mae'r gweithredydd yn gweithredu ar ochr chwith y tri operand ei hun ac mae'n cyfateb i swyddogaeth galwad @ (A, B, C). Os ydych yn ceisio ysgrifennu'r @ symbol fel infix, fel A @ BC neu rywbeth fel 'na, mae'n dod yn amlwg ei fod nid yn unig yn gweithio.

Mae'r flaenoriaeth a roddir gan y gorchymyn

Mae gan RPN fantais arall yn y gall y flaenoriaeth y gweithredwyr yn cael eu cynrychioli gan y trefn eu hymddangosiad. Ar yr un pryd mae angen i ni bresys, er y gallant gael eu cynnwys fel gweithrediadau cymeriadau i hwyluso'r trawsnewid o nodiant infix. Er enghraifft, AB + C * - sy'n cyfateb yn ddiamwys (A + B) * C, fel na all y lluosi yn cael ei gyfrifo nes ychwanegu perfformio, sy'n rhoi ail operand i luosi. Hynny yw, os yw'r gyfrifwyd AB + C * gan un gweithredwr ar y tro, rydym yn cael AB + C * -> (AB +) * C -> (A + B) * C.

cyfrifiad algorithm

Mae'r gweithredwr HGW yn edrych yr un fath fel swyddogaeth sy'n cymryd fel dadleuon ddau werth ysgrifenedig ar ei chwith. Yn ogystal, mae'n nodiant naturiol i'w ddefnyddio mewn ieithoedd rhaglennu, gan fod y dull o'i gyfrifo yn cyfateb i'r gweithrediadau stac a'r angen am dosrannu yn cael ei ddileu. Er enghraifft, bydd yr arrester yn y mynegiad 5 + 6 * 7 yn ymddangos fel 5, 6, 7 *, +, a gall fod yn cael ei gyfrifo yn syml drwy sganio o'r chwith i'r dde ac ysgrifennwch werthoedd mewn pentwr. Pryd bynnag y bydd arwydd cyffredin o weithredu, a ddewiswyd gan yr elfen uchaf 2 y cof cyfrifiadur, y gweithredydd yn cael ei ddefnyddio ac mae'r canlyniad dychwelyd i'r cof. Pryd fydd y canlyniad diwedd y mynegiant cyfrifiad fod yn y ben y pentwr.

Er enghraifft:

  • S = () 5, 6, 7, *, + 5 gosod ar y pentwr.
  • S = (5) 6, 7, *, + 6 a roddir ar y pentwr.
  • S = (5, 6), 7 *, 7 + gosod y pentwr.
  • S = (5, 6, 7), * 2 + ddewis gwerthoedd o'r simnai, defnydd * a gosod y canlyniad yn y pentwr.
  • S = (5, 6 * 7) = (5, 42) + 2 werth dethol o'r simnai, i gymhwyso'r + a rhoi'r canlyniad yn y pentwr.
  • S = (5 + 42) = (47) cyfrifo yn cael ei gwblhau, y canlyniad yn cael ei storio yn y ben y pentwr.

Gall hyn algorithm yn cael ei wirio RPN dro ar ôl tro, ond bob tro y bydd yn gweithio, waeth pa mor gymhleth y mynegiant rhifyddeg.

HGW a staciau wedi eu cysylltu'n agos. Mae'r enghraifft hon yn dangos sut i ddefnyddio'r cof i gyfrifo gwerth y nodiant Pwyl cefn. Llai amlwg yw y gallwch ddefnyddio'r simnai, trosi mynegiant infix safonol mewn methiant arennol acíwt.

Enghreifftiau o ieithoedd rhaglennu

Sylweddolodd Pascal RPN fel hyn (yn dangos y rhan o'r rhaglen).

I ddarllen y rhifau a gweithredwyr yn y cylch a elwir yn weithdrefn, sy'n pennu a yw nifer neu arwydd weithrediad tocyn. Yn yr achos cyntaf, mae'r gwerth storio yn y pentwr, a'r ail o'r ddau rif stac uchaf gweithredu cyfatebol yn perfformio ac mae'r canlyniad yn cael ei storio.

toktype: = num;

darllen (au);

os c yn [ '+', '-', '*', '/'] yna yn dechrau

os eoln Yna cn: = '' arall darllen (CN);

os cn = '', yna

achos

'+': Toktype: = ychwanegwch; '-': toktype: = is;

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

diwedd

arall yn dechrau

os a = '-' Yna SGN: = -1 arall Gwall: = c <> '+';

gyda: = cn

diwedd

ben;

os (nid camgymeriad) a (toktype = num) yna getnumber;

os toktype <> num yna yn dechrau

y = pop; x: = pop;

os nad yw, yna wall

achos toktype o

ychwanegwch: z: = x + y; is: z: = x-y; Mul: z: = x * y; div: z: = x / y

diwedd

gwthio (z);

RPN C-gweithredu (a ddangosir yn rhan o'r rhaglen):

am (au = strtok (au, w); s; s = strtok (0, w)) {

a = strtod (au, & e);

os (d> au) gwthio (a);

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

arall os (* s == '+') rpnop (a + b);

arall os (* s == '-') rpnop (a - b);

arall os (* s == '*') rpnop (a * b);

arall os (* s == '/') rpnop (a / b);

rpnop #undef

}

gweithrediadau caledwedd

Yn y dyddiau hynny, pan technoleg gyfrifiadurol yn ddrud iawn, yr oedd yn meddwl yn syniad da i orfodi pobl i ddefnyddio arresters ymchwydd. Ym 1960-au., Fel hyn, roedd yn bosibl i brynu'r cyfrifianellau, sy'n gweithio mewn nodiant Pwyleg cefn. I ychwanegu 2 a 3 ohonynt mae'n rhaid mynd i mewn 2, yna 3, a phwyswch y botwm "ynghyd". Ar yr olwg gyntaf, mae'r operands mewnbwn i'r gweithredydd yn ymddangos yn gymhleth ac yn anodd i'w cofio, ond ar ôl ychydig mae rhai yn gaeth i ffordd hon o feddwl ac ni allai ddeall pam y mae eraill yn mynnu infix dwp, sydd mor gymhleth ac felly yn gyfyngedig.

Burroughs cwmni ei adeiladu hyd yn oed prif ffrâm, a oedd heb gof arall, ac eithrio stac. Yr unig beth sy'n gwneud y peiriant - cymhwyso yr algorithmau a dulliau RPN i'r pentwr ganolog. Mae pob un o'i weithrediadau yn cael eu hystyried fel gweithredwyr arresters, sy'n berthnasol i werthoedd n uchaf. Er enghraifft, cymerodd y tîm y Cyfeiriad Dychwelyd o ben y pentwr, ac yn y blaen. D. Mae pensaernïaeth peiriant o'r fath yn syml, ond nid yn ddigon cyflym i gystadlu gyda'r saernïaeth yn fwy cyffredin. Mae llawer, fodd bynnag, yn dal yn gresynu at y ffaith bod dull mor syml a chain i cyfrifiadurol lle mae pob rhaglen yn fynegiant o HGW, dod o hyd ei barhad.

Mae un gyfrifianellau amser gyda RPN yn boblogaidd, ac mae rhai pobl yn dal i roi blaenoriaeth iddynt. Yn ogystal, maent wedi datblygu pentwr-oriented ieithoedd, megis Forth. Heddiw mae'n ychydig a ddefnyddir, ond yn dal yn hiraethus o'i gyn-ddefnyddwyr.

Felly beth yw ystyr jôcs am Reverse Pwyleg selsig?

Os byddwn yn cymryd yn ganiataol bod y gweithredydd y selsig, nodiant infix, dylai fod o fewn y gofrestr fel yn ci poeth confensiynol. Mae'r RPN ei leoli i'r dde yn ddau hanner yn cael therebetween barod ar ôl cyfrifiad. Nawr daw y rhan anodd - mwstard. Mae hi eisoes ar y selsig, t. E. cyfrifo Eisoes fel gweithredwr unary. Credir y dylid mwstard yn cael ei ddangos hefyd yn uncalculated ac felly dylid ei symud i ar y dde o'r selsig ... Ond mae'n bosibl, byddai hyn yn gofyn stac yn rhy fawr o ...

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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