# Vedecká kalkulačka ## Zadanie Naprogramujte vedeckú kalkulačku, ktorá vyhodnocuje matematické výrazy v infixovej notácii s podporou základných operácií a matematických funkcií. ## Požiadavky - Načítanie a práca s číslami s presnosťou minimálne 2 desatinné miesta - Podpora základných operácií: sčítanie (+), odčítanie (-), násobenie (*), delenie (/), zátvorky - Podpora matematických funkcií: sinus (sin), kosínus (cos), druhá odmocnina (sqrt), druhá mocnina (^), dekadický logaritmus (log) ## Funkcionalita Kalkulačka: 1. Načíta matematický výraz z príkazového riadku 2. Prevedie infixový zápis na postfixový (RPN) 3. Vyhodnotí výraz pomocou zásobníkového algoritmu 4. Vypíše výsledok s presnosťou na 2 desatinné miesta 5. Podporuje interaktívny režim so zadaním "koniec" pre ukončenie ## Opis riešenia Riešenie využíva algoritmus shunting-yard (železničný zoraďovací algorimus) pre prevod infixovej notácie na postfixovú (RPN). Následne sa RPN výraz vyhodnotí pomocou zásobníka. ### Hlavné kroky: 1. **Analýza vstupu**: Lexikálna analýza vstupného reťazca 2. **Konverzia na RPN**: - Použitie dvoch zásobníkov: jeden pre operátory/funkcie, druhý pre výstup - Respektovanie priorít operátorov a asociativity - Spracovanie matematických funkcií 3. **Vyhodnotenie RPN**: - Zásobníkový algoritmus pre vyhodnotenie - Aplikácia operátorov a funkcií 4. **Výstup**: Formátovanie výsledku na 2 desatinné miesta ### Podporované výrazy: - Jednoduché aritmetické operácie: `2 + 3 * 4` - Zátvorky: `(2 + 3) * 4` - Matematické funkcie: `sin(0)`, `cos(0)`, `sqrt(25)`, `log(100)` - Mocniny: `2^3`, `4^0.5` - Komplexné výrazy: `sin(0) + cos(0) * 2` ## Podmienky pre správne fungovanie 1. Program vyžaduje matematickú knižnicu (libm) 2. Vstupné výrazy musia byť matematicky korektné 3. Zátvorky musia byť správne párové 4. Delenie nulou spôsobí chybu 5. Logaritmus a odmocnina zo záporného čísla spôsobí chybu ## Inštalácia a spustenie ```bash # Kompilácia make # Spustenie make run # alebo ./calculator