Calvodax
Loading...
Searching...
No Matches
Calvodax

Calvodax is a calculator, that can represent numbers with unlimited precision.

Usage

Run using ```sh ./calvodax

Export variables with

export filename

Import variables with

import filename

Perform basic operations with standard math notation (you have to add spaces between tokens)
You can use functions like this

factorial ( number ) round ( number ) floor ( number ) ceil ( number ) ```

Zadání

Aplikace: Kalkulačka s neomezenou přesností

Termín odevzdání:

12.06.2023 11:59:59

 

Hodnocení:

0.0000

Max. hodnocení:

12.0000 (bez bonusů)

Odevzdaná řešení:

0 / 20

Nápovědy:

0 / 5

Tato semestrální práce patří do kategorie interaktivních aplikací. Vaším cílem je vytvořit aplikaci, kterou bude uživatel interaktivně ovládat (např. pomocí příkazů na standardním vstupu). Případné parametry aplikace se nesnažte definovat přímo v kódu (a to ani pomocí konstant). Umístěte je do konfiguračních souborů (jednoho nebo více), které váš program bude načítat.
Vaším úkolem je vytvořit kalkulačku pro výpočty s neomezenou přesností. Jednotlivá čísla a výsledky operací je možné ukládat do proměnných a tyto proměnné následně využívat v dalších výpočtech.
Kalkulačka musí implementovat následující funkcionality:
  1. Práce s celými i desetinnými čísly (především načtení a vypsání proměnných).

  2. Základní operace: sčítání, odčítání, násobení.

  3. Pro celá čísla implementujte navíc celočíselné dělení a zbytek po dělení.

  4. Funkce pro zaokrouhlení, faktoriál a umocňování (exponent je celé nezáporné číslo).

  5. Stav kalkulačky (tedy její proměnné) je možné uložit do souboru v textově čitelné formě. Stejně tak je potom možné tento stav ze souboru obnovit.

  6. Uložení v rámci proměnných (a souboru) musí být paměťově efektivní. Při ukládání proměnné do paměti se musí určit typ daného čísla. Rozlišujte alespoň řídká čísla (obsahují především nulové hodnoty, př. 10^10) a hustá čísla (opak řídkých, př. 100! / 10^20) a podle toho určete efektivní reprezentaci.

Dále aplikace musí zpracovávat výrazy dle jednoho z následujících principů:
  1. Základní operace (alespoň sčítání, odčítání a násobení) musí jít vnořovat pomocí závorek (př. (3 + X) * Y), závorky mohou být libovolně vnořené. Funkce a složitější operace mohou fungovat formou individuálních příkazů bez dalšího skládání (př. A = ROUND X -5).

  2. Pro zapisování výrazů využijte prefixový (nebo postfixový) zápis, mají tu výhodu, že nevyžadují závorky a snáze se zpracovávají. V tomto případě však veškeré operace a funkce musí jít zapsat v jednom výrazu (př. A = ROUND MUL Y ADD 3 X -5).

Ukázka běhu programu: (nezávazný příklad)
IMPORT memory.calc
X = FACT 100
SCAN Y
// input from user …
Z = X / Y^20
A = ROUND Z 10
PRINT A
EXPORT memory.calc
Kde lze využít polymorfismus? (doporučené)
  • reprezentace čísel: řídká čísla, hustá čísla, …

  • operace: sčítání, odčítání, násobení, …

  • formáty exportu: textový, binární, …

  • uživatelské rozhraní: konzole, ncurses, SDL, OpenGL (různé varianty), …

Další informace:
  • Pro parsování výrazu se může hodit Shunting-Yard algoritmus (http://en.wikipedia.org/wiki/Shunting-yard_algorithm).

  • Pro uložení do souboru můžete využít i binární formát, v takovém případě dejte uživateli na výběr.

  • Nesnažte se ukládat čísla do textového řetězce, taková reprezentace je velice neefektivní.

Tato úloha je hodnocena automatem a následně vyučujícím. Nejprve úlohu odevzdejte a odlaďte na automatu, pak jedno Vámi vybrané řešení předejte k ohodnocení vyučujícím. Předání úlohy k hodnocení učitelem se provede tlačítkem "Předat vyučujícímu" u zvoleného řešení. Vyučující bude hodnotit pouze jedno Vaše řešení, vyučující nezačně hodnotit dokud mu úlohu nepčředáte. Dokud není úloha ohodnocena jak automatem tak i učitelem, nejsou přidělené žádné body (jsou zobrazována pouze dílčí hodnocení v procentech). </tbody>