usaa25/sk2/README.MD
2026-02-12 00:11:50 +01:00

60 lines
1.8 KiB
Markdown

# 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