2.1 KiB
2.1 KiB
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:
- Načíta matematický výraz z príkazového riadku
- Prevedie infixový zápis na postfixový (RPN)
- Vyhodnotí výraz pomocou zásobníkového algoritmu
- Vypíše výsledok s presnosťou na 2 desatinné miesta
- 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:
- Analýza vstupu: Lexikálna analýza vstupného reťazca
- 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í
- Vyhodnotenie RPN:
- Zásobníkový algoritmus pre vyhodnotenie
- Aplikácia operátorov a funkcií
- 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
- Program vyžaduje matematickú knižnicu (libm)
- Vstupné výrazy musia byť matematicky korektné
- Zátvorky musia byť správne párové
- Delenie nulou spôsobí chybu
- Logaritmus a odmocnina zo záporného čísla spôsobí chybu
Inštalácia a spustenie
# Kompilácia
make
# Spustenie
make run
# alebo
./calculator