Feladatok‎ > ‎

Fordított lengyel forma

Leírás

Egy lengyel és egy ausztrál tudós az 50-es években alkotta meg a Fordított lengyel formulát. Egy, a megszokottól eltérő jelölés műveletek elvégzésére, ami ugyan emberek számára nehezen értelmezhető, viszont a gépek sokkal könnyebben feldolgozzák.

Úgynevezett veremmel működik. A vermet úgy kell elképzelni, mint az egymásra rakott könyveket. Tudsz a könyvkupac tetejére egy új könyvet rakni, és le tudod emelni a legfelsőt. Ezt a veremműködést javaslom leprogramozni ehhez a feladathoz, legyen egy betesz(int) eljárás és egy kivesz() függvény!

Most nézzük, hogyan is működik ez a forma! Az 1+2 fordított lengyel jelöléssel 1 2 +. A zárójeleket is helyettesíti a leírás, ez egy nagy előnye. Most nézzünk meg egy bonyolultabb példát! Az osztást egészosztásként értelmezzük!
2+4*(1-3)+15/6 (=-4)
Fordított lengyel formában:
2 4 1 3 - * + 15 6 / +

A végeredményt sorban olvasva lehet kiértékelni. Ha egy művelethez érünk, akkor elvégezzük az előtte lévő két számmal, majd lecseréljük őket a kapott eredménnyel:

2 4 (1 3 -) * + 15 6 / +
2 (4 -2 *) + 15 6 / +
(2 -8 +) 15 6 / +
-6 (15 6 /) +
(-6 2 +)
-4

Kiszámolós feladat: írj programot, amely kiszámolja egy fordított lengyel formás képlet számszerű végeredményét. (mindenkinek)

Nehezebb kiegészítés: alakíts át programmal egy ember számára olvasható képletet Lengyel formájúvá! (haladók, profik)

Bemenet

Mindkét részfeladat esetében szóközzel elválasztva jönnek a standard inputon egész  (int) számok illetve műveletek (+-*/, a / egészosztás) vagy zárójelek. A bemenetről feltételezhetjük, hogy van értelme :)

A nehezítés esetében azt is feltehetjük, hogy mindenhol ki van rakva a zárójel, ahol csak lehetséges.

Kimenet

A kiszámolós feladat kimenete egy egész szám, a furán megadott kifejezés értéke.

A kiegészítés kimenete pedig a fordított lengyel formulás képlet a bemenethez hasonló formátumban.

Példa

 Bemenet Kimenet 
Kiszámolós feladat
 6 4 - 2 * 1 * 3 + -2 + 1 2 * -  3
 Kiegészítés
( ( ( ( ( ( 6 - 4 ) * 2 ) * 1 ) + 3 ) + -2 ) - ( 1 * 2 ) )  6 4 - 2 * 1 * 3 + -2 + 1 2 * -

Hasznos lehet

Comments