40 lines
1.5 KiB
Markdown
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
|