usaa25/sk2/README.md
2026-01-25 15:26:05 +01:00

56 lines
2.1 KiB
Markdown

# 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