Számológép

Készítsünk egy karakteres módban működő számológép programot az egész számok halmazán. A program a négy alapműveletet ismerje (+,-,*,/ egész osztás), továbbá lehessen változókat használni. A változók nevei az angol abc kis- és nagybetűiből állhatnak. A program indulása után interaktív várja a kifejezéseket. Egy kifejezést az ENTER leütésével lehet lezárni.

Egy aritmetikai kifejezés <aritm. kif.> lehet egy "üres szó", egy változó neve <változó>, vagy egy számkonstans <konstans>, vagy ezekből műveletek és zárójelek segítségével képzett "matematikailag helyes" formulák. Egy kifejezés pedig lehet egy aritmetikai kifejezés, vagy egy értékadás, amelynek a bal oldalán egy változó neve, jobb oldalán pedig egy aritmetikai kifejezés állhat <változó>=<aritm. kif.>.

Az ENTER leütése után a program írja ki a kifejezés értékét, továbbá amennyiben a kifejezés egy értékadás, úgy az értékadás bal oldalán szereplő változó értéke legyen egyenlő a jobb oldalon álló aritmetikai kifejezés értékével.

Egy aritmetikai kifejezés értéke a következő:

ˇ        ha az aritmetikai kifejezés az "üres szó", akkor az értéke legyen nulla.

ˇ        ha az aritmetikai kifejezés egy változó neve, akkor az értéke legyen a változó értéke.

ˇ        ha az aritmetikai kifejezés egy számkonstans, akkor az értéke legyen a számkonstans értéke.

ˇ        ha az aritmetikai kifejezés egy formula, akkor az értéke legyen a formula értéke.

Egy kifejezés értéke a következő:

ˇ        ha a kifejezés egy aritmetikai kifejezés, akkor az értéke legyen az aritmetikai kifejezés értéke.

ˇ        ha a kifejezés egy értékadás, akkor a kifejezés értéke legyen az értékadás bal oldalán álló aritmetikai kifejezés értéke.

A változók mind egészszám típusúak, nem kell előre deklarálni őket, kezdeti értékük legyen nulla. Feltételezzük, hogy a felhasználó szintaktikailag helyes kifejezéseket ad. A kifejezések kiértékelésére használjuk a lengyelformát.

Példa:

> ALMA=1

< 1

> 5230

< 5230

> KORTE=

< 0

> (KORTE+1)*2

< 2

> ALMA=(ALMA+KORTE)*2

< 2

> KORTE=(ALMA+ALMA)/3

< 1

> KORTE

< 1

> ALMA*SZILVA

< 0

 

 

(Nagy Tibor)