usaa25/sk2/Readme.md
2026-01-25 15:52:25 +01:00

40 lines
1.5 KiB
Markdown

# Vedecká kalkulačka
## Zadanie
Napísať program v jazyku C, ktorý vyhodnotí matematický výraz v infixnej notácii zadaný zo stdin.
Podporované operácie: +, -, *, /, zátvorky (), sin(), cos(), sqrt(), log(), ^2 (druhá mocnina).
Presnosť: minimálne 2 desatinné miesta (použité double).
## Stručný opis funkčnosti
Program číta riadky zo stdin, vyhodnotí výraz pomocou funkcie `evaluate()` a vypíše výsledok s 2 desatinnými miestami.
Príklad použitia:
make all
./calculator
(2 + 3) * 2
10.00
sin(3.1416 / 2)
1.00
## Stručný opis riešenia
- Použitý Shunting-yard algoritmus na konverziu infix na postfix.
- Tokenizácia výrazu na čísla, operátory, funkcie, zátvorky.
- Vyhodnotenie postfixu pomocou zásobníka.
- Ošetrenie chýb: delenie nulou, negatívna odmocnina, log <=0, nesprávne zátvorky.
- Unary operátory/funkcie spracované v postfix vyhodnotení.
## Podmienky, za ktorých funguje správne
- Výraz môže obsahovať medzery (ignorované).
- Funkcie vyžadujú zátvorky: sin(x), nie sin x.
- Druhá mocnina ako ^2 (postfix unary).
- Čísla: desatinné, negatívne.
- Nefunguje pre pokročilé veci ako exponentiácia (^ namiesto ^2), viacargumentové funkcie.
## Zoznam použitých zdrojov
- Algoritmus Shunting-yard: Wikipedia[](https://en.wikipedia.org/wiki/Shunting_yard_algorithm)
- Dokumentácia <math.h>: man pages (sin, cos, sqrt, log)
- Základný tokenizer a zásobník: vlastná implementácia inšpirovaná prednáškami a DU.
- Šablóna Makefile: štandardná pre C projekty.
Autor: Nataliia Kobryn