9
Obrnjeni poljski zapis (RPN) je zapis, ki nam omogoča računanje aritmetičnih izrazov brez oklepajev. Izraz, zapisan v RPN, je zaporedje števil (omejili se bomo na cela števila med 0 in 9) ter aritmetičnih operatorjev (omejili se bomo na operatorje +
, -
in *
). Vrednost izraza v RPN izračunamo tako, da najprej ustvarimo prazen sklad, nato pa se pomikamo po znakih izraza. Ko naletimo na število, ga dodamo na sklad. Ko naletimo na operator, odvzamemo dve števili s sklada (recimo, da smo najprej odvzeli število a, potem pa število b), izračunamo vrednost izraza b + a, b − a oziroma b · a (odvisno od operatorja) in rezultat dodamo na sklad. Če je izraz pravilno zapisan, bo ob koncu postopka na skladu ostal en sam element. To je rezultat izraza.
Na primer, vrednost izraza 345+*6-
znaša 21. V običajnem zapisu bi bil ta izraz videti takole: 3 ∗ (4 + 5) − 6.
Napiši funkcijo IzracunajRPN(rpn)
, ki vrne vrednost podanega izraza, zapisanega v obliki RPN. Lahko predpostaviš, da niz rpn
vsebuje samo števke od 0 do 9 in znake +
, -
ter *
, in to v veljavnem zaporedju.
10
Napiši funkcijo PretvoriVRPN(izraz)
, ki vrne pretvorbo podanega običajno zapisanega izraza v zapis RPN. Izraz je sestavljen samo iz enomestnih pozitivnih števil ter operatorjev +
, -
in *
. Presledkov in oklepajev ne vsebuje.
Na primer, pretvorba izraza 3+4*5-6
je enaka 345*+6-
.