# 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 : 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