1.8 KiB
Vedecká kalkulačka Matej Hajduk
Zadanie
Naprogramovať vedeckú kalkulačku, ktorá vyhodnocuje matematické výrazy v infixnej notácii. Kalkulačka musí podporovať:
- načítanie a prácu s číslami s presnosťou min. 2 desatinné miesta
- sčítanie, odčítanie, násobenie, delenie -zátvorky
- funkcie: sinus, cosinus, odmocnina, druhá mocnina, logaritmus
Príklad:
- (2 + 3) * 2 -> 10
- (10 * 2) + (6 / 2) -> 23
Stručný opis funkčnosti
Program číta matematické výrazy zo štandardného vstupu (každý výraz na samostatnom riadku). Pre každý výraz vypočíta výsledok a vypíše ho na štandardný výstup.
-pri chybe vypíše hlášku na stderr -podporuje aj zložitejšie výrazy so zátvorkami -podporuje aj unárne mínus (napr. -3*(2+1))
Stručný opis riešenia
Riešenie je rozdelené na 3 časti:
-
Tokenizácia -rozdelenie vstupného reťazca na tokeny (čísla, operátory, funkcie, zátvorky)
-
Prevod infix -> postfix -použitý algoritmus Shunting-yard -rieši priority operátorov a zátvorky
-
Vyhodnotenie postfixu -postfixový výraz sa vyhodnotí pomocou zásobníka (stack) -pracuje sa s typom double
Podmienky za ktorých program funguje
- výrazy musia byť syntakticky správne (napr. správne zátvorky)
- podporované operátory: + - * / ^ -podporované funkcie: sin(x), cos(x), sqrt(x), log(x), ln(x)
- podporované konštanty: pi, e
- sin a cos používajú radiány
- log(x) je log10(x)
- delenie nulou je ošetrené ako chyba
-doménové chyby:
- sqrt(x) vyžaduje x >= 0
- log(x) a ln(x) vyžadujú x > 0
Použité zdroje
-Matej Hajduk (implementácia)
- ChatGPT (GPT-5.2), branch: sk2 (pomoc pri návrhu)
- Shunting-yard algoritmus (infix -> postfix)
-dokumentácia C:
- math.h (sin, cos, sqrt, log, log10, pow)
- strtod() (parsovanie čísiel) -geek4geeks