1.5 KiB
1.5 KiB
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
- 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