56 lines
2.1 KiB
Markdown
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
|