60 lines
1.8 KiB
Markdown
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
|
|
|