usaa25/sk2/README.MD
2026-02-12 00:11:50 +01:00

1.8 KiB

Vedecká kalkulačka Matej Hajduk

Zadanie

Naprogramovať vedeckú kalkulačku, ktorá vyhodnocuje matematické výrazy v infixnej notácii. Kalkulačka musí podporovať:

  • načítanie a prácu s číslami s presnosťou min. 2 desatinné miesta
  • sčítanie, odčítanie, násobenie, delenie -zátvorky
  • funkcie: sinus, cosinus, odmocnina, druhá mocnina, logaritmus

Príklad:

  • (2 + 3) * 2 -> 10
  • (10 * 2) + (6 / 2) -> 23

Stručný opis funkčnosti

Program číta matematické výrazy zo štandardného vstupu (každý výraz na samostatnom riadku). Pre každý výraz vypočíta výsledok a vypíše ho na štandardný výstup.

-pri chybe vypíše hlášku na stderr -podporuje aj zložitejšie výrazy so zátvorkami -podporuje aj unárne mínus (napr. -3*(2+1))

Stručný opis riešenia

Riešenie je rozdelené na 3 časti:

  1. Tokenizácia -rozdelenie vstupného reťazca na tokeny (čísla, operátory, funkcie, zátvorky)

  2. Prevod infix -> postfix -použitý algoritmus Shunting-yard -rieši priority operátorov a zátvorky

  3. Vyhodnotenie postfixu -postfixový výraz sa vyhodnotí pomocou zásobníka (stack) -pracuje sa s typom double

Podmienky za ktorých program funguje

  • výrazy musia byť syntakticky správne (napr. správne zátvorky)
  • podporované operátory: + - * / ^ -podporované funkcie: sin(x), cos(x), sqrt(x), log(x), ln(x)
  • podporované konštanty: pi, e
  • sin a cos používajú radiány
  • log(x) je log10(x)
  • delenie nulou je ošetrené ako chyba -doménové chyby:
    • sqrt(x) vyžaduje x >= 0
    • log(x) a ln(x) vyžadujú x > 0

Použité zdroje

-Matej Hajduk (implementácia)

  • ChatGPT (GPT-5.2), branch: sk2 (pomoc pri návrhu)
  • Shunting-yard algoritmus (infix -> postfix) -dokumentácia C:
    • math.h (sin, cos, sqrt, log, log10, pow)
    • strtod() (parsovanie čísiel) -geek4geeks