OrdinadorsProgramari

RPN: Algorisme, mètodes i exemples

RPN un cop formada la base d'un programador d'ordinadors al món. Avui dia no és tan ben conegut. Per tant, exemple còmic, que representa una "marxa enrere" rotllos de salsitxa polonesa fora, encara pot ser mal interpretat per alguns programadors amb coneixements. No molt bé explicar la broma, però en aquest cas serà plenament justificat.

infix

Tots els programadors, i la majoria dels estudiants estan familiaritzats amb l'ús dels operadors. Per exemple, els valors de l'expressió x + de suma de les variables x i y signe més usat. Menys conegut és el fet que aquest és pres de les matemàtiques notació, anomenada notació infija, de fet, és un gran problema per a les màquines. Aquest operador rep com a entrada dos valors es registren a l'esquerra i la dreta. En la programació de la notació utilitza opcionalment amb les operacions dels signes. Per exemple, x + i pot ser escrit com una funció de plegat (x, y), en què el compilador i eventualment converteix notació infija. No obstant això, tothom sap la matemàtica és massa bo per no fer servir expressions aritmètiques, que formen una mena de mini-llenguatge intern en gairebé qualsevol llenguatge de programació.

traductor fórmula

El primer llenguatge de programació Fortran veritable èxit s'ha convertit en tan gran mesura a causa de que l'expressió aritmètica (és a dir fórmula ..) Es va convertir (broadcast) en el codi, d'aquí el nom d'ella - Fórmula traducció. Abans d'això, havien d'escriure, per exemple, doblegat en forma de funcions (i multiplicar (b, c)). En el problema de l'aplicació de COBOL fórmula de conversió automàtica es va considerar molt difícil perquè els programadors havien d'escriure coses com Afegir l'A a la B Mutliply Per C.

Què passa amb infija?

El problema és, que els operadors tenen propietats com ara la precedència i associativitat. A causa d'això, la definició de la funció infija es converteix en tasca no trivial. Per exemple, la multiplicació té major precedència que l'addició o sostracció, el que significa que l'expressió 2 + 3 * 4 no és igual a la suma de 2 i 3, multiplicat per 4, com ho seria en l'acompliment dels operadors d'esquerra a dreta. De fet, multiplicar 3 per 4 i afegir 2. Aquest exemple il·lustra que el càlcul de l'expressió infija sovint requereix un canvi en l'ordre d'operadors i operands. A més, és necessari utilitzar claus per buscar notació més clara. Per exemple, (2 + 3) * (4 + 5) no es pot escriure sense els parèntesis, perquè 2 + 3 * 4 + 5 vol dir que cal multiplicar 3 per 4 i afegir 2 i 5.

L'ordre en el que es desitja calcular els operadors requereix un llarg record. A causa d'això, els estudiants que comencen a aprendre aritmètica, sovint obtenen resultats erronis, encara que les operacions reals es realitzen correctament. Cal ensenyar l'ordre de les declaracions d'accions de memòria. En primer lloc, l'acció s'ha de dur a terme entre parèntesi, a continuació, multiplicació i divisió, i, finalment, la suma i la resta. Però hi ha una altra forma d'escriure expressions matemàtiques com a notació infija és només una de les possibles petites "llengües" que es poden afegir a més.

Prefix i de sufix notació

Dues de les alternatives més conegudes és registrar l'operador abans o després de les seves operands. Se'ls coneix com la notació de prefix i de sufix. El lògic Yan Lukasevich va inventar la primera d'elles en 1920. Va viure a Polònia, de manera que el disc es diu polonesa. versió de Postfix, respectivament, anomenat notació polonesa inversa (ARF). L'única diferència entre aquests dos mètodes és la direcció en la que en llegir el registre (d'esquerra a dreta o de dreta a esquerra), de manera que només cal considerar en detall només un d'ells. L'operador de OPN està escrit després que els seus operands. Per tant, l'expressió AB + representa un exemple RPN per a A + B.

nombre il·limitat d'operands

L'avantatge immediata de la notació és que resumeix l'operador n-adic i la notació infija és realment només funciona amb dos operands, t. I. són inherentment adequat només per a operacions binàries. Per exemple, ABC @ és l'expressió polonesa inversa utilitzant marca triàdica que és el valor màxim de A, B i C. En aquest cas, l'operador actua sobre l'esquerra de les tres operant si mateix i correspon a una trucada de funció @ (A, B, C). Si voleu escriure el símbol @ com infija, com ara A @ AC o alguna cosa per l'estil, es fa evident que simplement no funciona.

La prioritat donada per l'ordre

RPN té un altre avantatge que la prioritat dels operadors pot ser representat per l'ordre de la seva aparició. Alhora mai necessitar aparells ortopèdics, encara que poden ser inclosos com a operacions de caràcters per facilitar la conversió de notació infija. Per exemple, AB + C * - equivalent inequívoca (A + B) * C, de manera que la multiplicació no es pot calcular fins que l'addició realitzada, el que dóna un segon operant per a la multiplicació. És a dir, si el calculat AB + C * per un operador a la vegada, obtenim AB + C * -> (AB +) * C -> (A + B) * C

algoritme de càlcul

L'operador de OPN es veu com una funció que pren com a arguments dos valors escrits en la seva esquerra. A més, és una notació natural per al seu ús en llenguatges de programació, com el mètode de càlcul correspon a les operacions de la pila i la necessitat d'anàlisi s'elimina. Per exemple, el descarregador en l'expressió maig + 6 * 7 apareixerà com 5, 6, 7 *, +, i pot ser calculada simplement mitjançant l'exploració d'esquerra a dreta i escriure els valors en una pila. Sempre que un signe comú d'operació, seleccionat per l'element superior 2 de la memòria de l'ordinador, l'operador s'utilitza i el resultat retornat a la memòria. Quan el resultat final de l'expressió de càlcul estarà a la part superior de la pila.

Per exemple:

  • S = () 5, 6, 7, *, + 5 col·locat a la pila.
  • S = (5) 6, 7, *, + 6 col·locat a la pila.
  • S = (5, 6), 7 *, 7 + col·locar la pila.
  • S = (5, 6, 7), * 2 + triar els valors de la pila, l'ús * i col·locar el resultat a la pila.
  • S = (5, 6 * 7) = (5, 42) + 2 valors seleccionats de la pila, per aplicar el + i posar el resultat a la pila.
  • S = (5 + 42) = (47) de càlcul es completa, el resultat s'emmagatzema a la part superior de la pila.

Aquest algoritme es pot comprovar RPN en diverses ocasions, però cada vegada que funcionarà, independentment de la complexitat de l'expressió aritmètica.

OPN i les piles estan estretament vinculats. Aquest exemple mostra com utilitzar la memòria per calcular el valor de la notació polonesa inversa. Menys òbvia és que es pot utilitzar la pila, convertir expressió infija estàndard en la insuficiència renal aguda.

Exemples de llenguatges de programació

Pascal RPN es va adonar com això (mostra la part del programa).

Per llegir els números i operadors en el cicle anomenat procediment, que determina si el nombre o signe operació token. En el primer cas, el valor emmagatzemat a la pila, i el segon dels dos números de pila superiors acció corresponent es porta a terme i el resultat s'emmagatzema.

toktype: = num;

llegir (s);

si c en [ '+', '-', '*', '/'] després començar

Si EOLN continuació, CN: = '' una altra lectura (CN);

si cn = '' llavors

cas d'una

'+': Toktype: = sumar; '-': toktype: = sub;

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

final

else begin

si a = '-' llavors sgn: = -1 Error altra cosa: = c <> '+';

amb: = cn

final

acabar;

si (no error) i (toktype = num) llavors obtieneNumero;

Si toktype <> num després començar

i = pop; x: = pop;

si no és error, llavors

cas de toktype

afegir: z: = x + i; substitució: z: = x-i; mul: z: = x * i; div: z: = x / i

final

push (z);

RPN C-aplicació (part mostrada del programa):

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

a = strtod (s, i e);

si (i> s) d'empenta (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 rpnop (* s == '*') (a * b);

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

rpnop #undef

}

implementacions de maquinari

En aquells dies, quan la tecnologia informàtica era molt car, es va pensar una bona idea per obligar la gent a utilitzar descarregadors de sobretensió. El 1960-s., Com ara, era possible comprar les calculadores, que treballen en notació polonesa inversa. Per afegir 2 i 3 d'ells ha d'introduir 2, després 3, i premeu el botó "més". A primera vista, els operands d'entrada per a l'operador semblaven complicats i difícils de recordar, però després d'un temps que alguns són addictes a aquesta forma de pensar i no podia entendre per què els altres insisteixen en infija estúpida, que és tan complicat i així és limitada.

companyia Burroughs fins i tot va construir un mainframe, que no tenia altra memòria, excepte pila. L'única cosa que fa la màquina - aplicar els algoritmes i mètodes RPN a la pila central. Totes les seves operacions van ser considerats com a operadors parallamps, que s'aplica als valors de n superiors. Per exemple, l'equip va prendre la Direcció de devolució de la part superior de la pila, i així successivament. D. L'arquitectura d'una màquina d'aquest tipus era simple, però no prou ràpid com per competir amb les arquitectures més comunes. Molts, però, encara lamentar el fet que un enfocament senzill i elegant a la informàtica on cada programa era una expressió de OPN, troba la seva continuació.

Un calculadores de temps amb RPN eren populars, i algunes persones encara els donen preferència. A més, van desenvolupar un orientat a pila idiomes, com el Forth. Avui dia és poc utilitzat, però encara nostàlgica dels seus antics usuaris.

Llavors, quin és el significat acudits sobre la salsitxa polonesa inversa?

Si assumim que l'operador de la salsitxa, la notació infija, ha d'estar dins del rotllo com en el gos calent convencional. El RPN es troba just en dues meitats entre elles aconsegueixen llestos després de càlcul. Ara ve la part difícil - mostassa. Ella ja és a la salsitxa, t. I. Ja calcula com un operador unari. Es creu que la mostassa també ha de ser mostrat com a falta de càlcul i per tant s'ha de moure a la dreta de la salsitxa ... Però és possible, això requeriria massa gran pila de ...

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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