Feladat: S.39 Korcsoport: - Nehézségi fok: -
Füzet: 2008/november, 487. oldal  PDF  |  MathML 
Témakör(ök): Programozás, algoritmusok, Nehezebb feladat

A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre.

Készítsünk számológépet, mely képes összetett számtani kifejezések kiértékelésére. A kifejezésekben egész számok, zárójelek és a négy alapművelet jele (+,-,*,/) szerepelhetnek. A műveleti sorrend a szokványos legyen: a szorzás és osztás egyenrangúak, és megelőzik az összeadást és a kivonást, melyek szintén egyenrangúak. Ezen kívül, ha zárójelek másként nem jelölik, a halmozott egyenrangú műveleteket mindig balról jobbra értékeljük ki. Tehát például: e-f-a/b/c*d=(e-f)-(((a/b)/c)*d).
A program a kiértékelendő kifejezéseket fájlból olvassa, és az eredményeket fájlba írja. A bemeneti, illetve a kimeneti fájlok nevei az első, illetve második parancssori argumentumok. A bemenet minden sorában egy-egy kifejezés szerepel. A kimenetben minden kifejezéshez egy-egy sor tartozzon, melyben egyetlen (tört)szám, a kifejezés pontos értéke szerepeljen, legegyszerűbb alakra hozva. Ha a kifejezés kiértékelése közben 0-val osztás történne, akkor a sorba a ,,Nullával osztás.'' szöveg kerüljön.
Feltehetjük, hogy egy sor legfeljebb 250 karakter hosszú, a kifejezések szintaktikailag helyesek, és hogy a számítás során (mindig a legegyszerűbb alakra hozva) minden részeredmény leírható két 16-bites egész szám hányadosaként. Figyeljünk azonban arra, hogy a műveletek elvégzése közben se fordulhasson elő túlcsordulás, szükség esetén használjunk 32 bites számokat!

 
 

Beküldendő a program forráskódja (s39.pas, s39.cpp, ...), valamint a program rövid dokumentációja (s39.txt, s39.pdf, ...), amely tartalmazza a megoldás rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztőkörnyezetben fordítható.