usaa25/sk2
2026-01-25 15:53:12 +01:00
..
calculator.c zadanie ku skuske 2026-01-25 15:52:25 +01:00
calculator.h zadanie ku skuske 2026-01-25 15:53:12 +01:00
main.c zadanie ku skuske 2026-01-25 15:52:25 +01:00
Makefile zadanie ku skuske 2026-01-25 15:52:25 +01:00
Readme.md zadanie ku skuske 2026-01-25 15:52:25 +01:00

Vedecká kalkulačka

Zadanie

Napísať program v jazyku C, ktorý vyhodnotí matematický výraz v infixnej notácii zadaný zo stdin.
Podporované operácie: +, -, *, /, zátvorky (), sin(), cos(), sqrt(), log(), ^2 (druhá mocnina).
Presnosť: minimálne 2 desatinné miesta (použité double).

Stručný opis funkčnosti

Program číta riadky zo stdin, vyhodnotí výraz pomocou funkcie evaluate() a vypíše výsledok s 2 desatinnými miestami.
Príklad použitia: make all ./calculator (2 + 3) * 2 10.00 sin(3.1416 / 2) 1.00

Stručný opis riešenia

  • Použitý Shunting-yard algoritmus na konverziu infix na postfix.
  • Tokenizácia výrazu na čísla, operátory, funkcie, zátvorky.
  • Vyhodnotenie postfixu pomocou zásobníka.
  • Ošetrenie chýb: delenie nulou, negatívna odmocnina, log <=0, nesprávne zátvorky.
  • Unary operátory/funkcie spracované v postfix vyhodnotení.

Podmienky, za ktorých funguje správne

  • Výraz môže obsahovať medzery (ignorované).
  • Funkcie vyžadujú zátvorky: sin(x), nie sin x.
  • Druhá mocnina ako ^2 (postfix unary).
  • Čísla: desatinné, negatívne.
  • Nefunguje pre pokročilé veci ako exponentiácia (^ namiesto ^2), viacargumentové funkcie.

Zoznam použitých zdrojov

  • Algoritmus Shunting-yard: Wikipedia
  • Dokumentácia <math.h>: man pages (sin, cos, sqrt, log)
  • Základný tokenizer a zásobník: vlastná implementácia inšpirovaná prednáškami a DU.
  • Šablóna Makefile: štandardná pre C projekty.

Autor: Nataliia Kobryn