# 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: 1. Tokenizácia -rozdelenie vstupného reťazca na tokeny (čísla, operátory, funkcie, zátvorky) 2. Prevod infix -> postfix -použitý algoritmus Shunting-yard -rieši priority operátorov a zátvorky 3. 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