Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

RPN-kalkulatorer (RPN står for Reverse Polish Notation, se http://en.wikipedia.org/wiki/Reverse_Polish_notation) er kalkulatorer der operander (verdier) angis først og så operatorene (operasjoner), istedenfor den vanlige infix-notasjonen. For å regne ut 1 + 2 så angis altså 1 og to og så angis +, som gir resultatet 3. For å bygge videre på resultatet, angir en nye operander og operatorer, f.eks. regnes (1 + 2) * 3 ut ved å angi sekvensen 1 2 + 3 *. Implementasjonen er svært enkelt, en legger bare operandene på en stack ettersom de angis, og operatorene fjerner og bruker disse og legger resutlatet tilbake.

rpncalc1.py

Nedenfor vises en enkel Python-implementasjon, med forklaringer til høyre.

...

Vi har plantet (minst) to feil i koden: Den ene har med manglende operander å gjøre, den andre med håndteringen av minus. Prøv å se om du finner en måte å rette dem på! Du finner (et forslag til) svar i rpncalc2-eksemplet som bygger videre på dette.

Håndtering av variabler og verdier

Koden over bruker flere variabler for å holde rede på tilstanden til programmet. Den viktigste variablen er operands, som refererer til lista med operander, som utvides og minskes ved gjennomgang av løkka. I tillegg har vi de to variablene token og operand, som holder det brukeren skrev inn som henholdvis (rå)tekst (string) og og konvertert til desimaltall (float). Mens det er viktig at operands-variablen beholder sin verdi for hver runde i løkka, så er det ikke viktig at token og operand gjør det. Tvert imot, så tenker en gjerne at disse er lokale for løkka, selv om Python ikke behandler dem annerledes enn operands i så måte. I andre språk, f.eks. Java, så er det mulig å opprette (deklarere) såkalt blokk-lokale variabler.

...