ZÁPOČTOVÁ PRÁCE z UIR

Transkript

ZÁPOČTOVÁ PRÁCE z UIR
ZÁPOČTOVÁ PRÁCE z UIR
Vědecká kalkulačka
Jméno a příjmení:
Osobní číslo:
Studijní skupina:
Obor:
E-mail:
Jan Tichava
A04386
pondělí, 4 – 5
INIB – INF
[email protected]
Datum odevzdání: 1.5.2006
Jan Tichava
A04386
Vědecká kalkulačka
Semestrální práce KIV/UIR
Vědecká kalkulačka
Zadání
Označení zadání: 2004KT01
Vytvořte program "Vědecká kalkulačka", který bude realizovat běžné výpočty.
Program umožní zadávat analytické výrazy, které bude analyzovat, a provádět
výpočet. Čili dokáže pracovat např. s následujícím zápisem:
sin(90)+200/cos(90)*300
Umožní navíc definovat až 10 proměnných (x1 až x10), které lze pak používat ve
výrazech, např. tan(x1*x2).
Analýza úlohy
Návrh vzhledu a funkce programu byl částečně inspirován v programu AllerCalc a
částečně skutečnou kalkulačkou Texas Instruments TI-89 (odkazy na tyto produkty
viz: http://home.zcu.cz/~jtichava/uir). Nalezl jsem několik různých postupů, jak
vyhodnotit matematický výraz. Jednou možností je, rozložit si celý výraz do stromu
podle závorem a pak strom postupně od listů vyhodnotit. Jinou možností je
naprogramovat gramatiku pro rozpoznávání výrazů. Poslední možností, kterou jsem
nalezl bylo vyhodnocování s postupných ukládáním výrazu do zásobníku.
Uvažoval jsem mezi vyhodnocováním pomocí stromu a pomocí zásobníku.
Vyhodnocování stromem není těžké, ale zavrhnul jsem ho, protože mi připadala
složitější implementace zpracování funkcí. Proto jsem se rozhodl vyhodnocovat
výraz pomocí zásobníku
Popis algoritmu řešení
V souboru JAR je přiložena vygenerovaná JavaDoc dokumentace, která obsahuje
popis všech public metod a tříd. Všechny metody jsou okomentovány pro JavaDoc,
ale pro případné uživatele těchto tříd nejsou podstatné, protože nejsou z jiné metody
viditelné.
1
Jan Tichava
A04386
Vědecká kalkulačka
Semestrální práce KIV/UIR
Prezentační vrstva
Vrstva obsahuje metody pro zobrazování grafického prostřední a jeho obsluhu. Sbírá
data od uživatele a předává je aplikační vrstvě k vyhodnocení. Po vyhodnocení
výrazu zobrazí výsledek, případně chybu, pokud byl výraz nekorektní.
Aplikační vrstva
Vrstva přijme od prezentační vrstvy textový řetězec jako vstupní výraz. Nejprve
projde celý řetězec a nahradí znak desetinné čárky za desetinnou tečku. Pak nahradí
všechny konstanty a proměnné v řetězci jejich skutečnými hodnotami, v případě, že
není před konstantou či proměnnou operace, jaká se má provést, bude se
předpokládat implicitní násobení. Před vlastním vyhodnocováním budou ještě
nahrazeny všechny funkce jejich funkčními hodnotami, argumentem funkce může být
libovolný aritmetický výraz – jedno číslo, libovolná aritmetická operace s čísly nebo
další funkce se svými argumenty, výrazy uvnitř argumentu funkce je možno libovolně
závorkovat. Na tomto místě se již ve výrazu nevyskytují proměnné a konstanty, proto
je již neuvažuji. Nyní se ve výrazu vyskytují pouze čísla spojená různými operandy,
mohou být ještě uzavřeny v závorkách, a jejich vyhodnocení je již triviální záležitost.
Vyhodnocení výrazu
Výraz je definovatelný jako posloupnost: číslo, operand, číslo, operand … operand,
číslo, proto se automaticky na konec přidává znak „=“, aby bylo možné vytvořit
dvojice [číslo, operand]. Při průchodu řetězcem se přečte číslo a uloží do zásobníku
pro čísla (dále ZC), pak se přečte operand a uloží do zásobníku pro operandy (dále
ZO). Tuto akci porad opakuje a přitom porovnáváme jestli má operand, který právě
přidáváme vyšší nebo nižší prioritu, pokud má nižší, tak provede operaci, která je
v zásobníku a opět porovnáme operandy a postupujeme stejně. Pokud je priorita
vyšší, pouze vložíme do zásobníku.
Pokud se ve výrazu vyskytují závorky, nejprve se vyhodnotí obsah nejvíce vnořené
závorky a postupně se hloubka zanoření zmenšuje, až bude výraz vyhodnocen celý.
Obdobně se vyhodnocují funkce – vyhodnotí se vnitřek argumentu funkce jako
obyčejný výraz a pak se vyhodnotí funkční hodnota.
Popis programu
Aplikace je naprogramována v jazyce Java. Pro běh programu je nutné mít
nainstalováno JRE verze 1.5, ideálně 1.5.0_06-b05 na které byl program testován.
Na jiných verzích Javy nemusí být zaručena bezproblémová funkce programu –
starší verze Javy nemají typované kolekce a naopak v novější verzi 1.6 nefunguje
automatické posouvání výsledku.
2
Jan Tichava
A04386
Vědecká kalkulačka
Semestrální práce KIV/UIR
Jako přílohu přikládán UML diagram, nepopisuji v něm Prezentační vrstvu, protože
obsahuje vesměs pouze velké množství tříd, které jsou potřebné pro GUI. Popis
jednotlivých tříd a metod – viz vygenerovaný JavaDoc v JAR souboru.
Popis obsluhy programu
Program je možné spustit na libovolné platformě, například Microsoft Windows,
většina distribucí Linuxu a dalších, jedinou podmínkou je nainstalovaná Java, nejlépe
ve verzi 1.5 a vhodné grafické prostředí – ze známých uvedu KDE nebo Gnome,
která se často používají v Linuxu. Na všech systéme půjde program spustit pomocí
příkazu java -jar kalkulacka.jar, který zobrazí navíc konzoli systému. Na
většině systémů by mělo být možné spustit program také pomocí příkazu
javaw -jar kalkulacka.jar, který již konzoli nezobrazuje. V případě správně
nakonfigurovaného systému stačí poklepat na soubor a program se spustí.
Hlavní okno programu
Celé okno lze rozdělit na 4 hlavní části: příkazový řádek, výstupní pole. numerická
část a ovládací tlačítka.
Adresní řádek
Do adresního řádku může uživatel zadávat libovolné matematické výrazy, které
kalkulačka podporuje a libovolně je uzavírat do kulatých závorek.
např.: sin(90)+200/cos(90)*300
3
Jan Tichava
A04386
Vědecká kalkulačka
Semestrální práce KIV/UIR
Výstupní pole
Zobrazí se zde výraz, který uživatel zadal a bezprostředně pod ním hned výsledek,
popřípadě „Chyba!“, pokud je výraz nekorektně napsaný nebo výsledek vede
k chybě.
Numerická část
Umožňuje zadávání jednoduchých matematických výrazů pomocí myši
Ovládací tlačítka
Paměť
Stupně/Radiány
Vymazat
About
Zobrazí dialog pro správu proměnných
Přepíná mezi počítáním ve stupních nebo radiánech
Vymaže výstupní pole
Zobrazí dialog s informacemi o aplikaci
Správa proměnných
4
Jan Tichava
A04386
Vědecká kalkulačka
Semestrální práce KIV/UIR
Přidání proměnné
Po vyplnění názvu proměnné a její hodnoty je nutné stisknout tlačítko a proměnná
bude přidána. Pokud proměnná se stejným názvem již existuje, bude její hodnota
nahrazena novou.
Odebrání proměnné
Podobně jako při přidávání, ale pole pro hodnotu se nechá volné a proměnná bude
odebrána.
About
Podporované příkazy
Základní operace
+-*/
sqrt()
%
sčítání, odčítání, násobení dělení
druhá odmocnina
zbytek po dělení
Pokročilé operace
E
^
abs()
sgn()
ln()
log()
()
exponent = *10^n
umocňování na n-tou
absolutní hodnota
znaménko funkce
přirozený logaritmus
dekadický logaritmus
upravení priorit závorkováním
Goniometrické funkce
sin(), cos(), tan()
sina(), cosa(), tana()
sinh(), cosh()
základní
inverzní
hyperbolické
Konstanty
pi
exp
Ludolphovo číslo π (3,141592654)
Eulerovo číslo (2,718281828)
Celý dokument a všechny screenshoty jsou umístěny v plné kvalitě zde:
http://home.zcu.cz/~jtichava/uir
5
Jan Tichava
A04386
Vědecká kalkulačka
Semestrální práce KIV/UIR
Rozbor výsledků, zhodnocení
Program je plně funkční téměř na každé myslitelné platformě, bez nutnosti jeho nové
kompilace nebo jiných změn pro dané prostředí. Uživatel může zadat libovolný
aritmetický výraz s využitím výše uvadaných funkcí a program je vyhodnotí. První
nevýhodou je nutnost instalovat na počítač Java Runtime Environment, to je daň za
výše uvedenou přenositelnost mezi různými platformami. Program má také o trochu
vyšší hardwarové nároky na počítač na rozdíl od aplikace, která se překládá přímo
do spustitelného kódu, ale to bych dnes již neoznačoval jako nevýhodu, ale spíše jen
jako malé mínus.
¨
Závěr
Program provádí vše, co bylo požadováno v zadání a navíc umožňuje deklarovat
libovolné množství vlastních uživatelských proměnných s názvem, jaký si zvolí
uživatel. Další funkce, kterou kalkulačka zvládá je přepínání mezi stupni a radiány.
V případném dalším vývoji tohoto programu by bylo možné poměrně jednoduše
implementovat další funkce, které by kalkulačka vyhodnocovala nebo vykreslování
grafů funkcí.
6

Podobné dokumenty

Jak vytvořit DVD ze souboru nahraného přijímačem IPBox.

Jak vytvořit DVD ze souboru nahraného přijímačem IPBox. 2. Vytvoření audio a video streamů ze souboru K této fázi potřebujeme aplikaci ProjectX. Tato aplikace je psaná v Javě, pro její běh musíme mít nainstalovánou Javu(TM) SE Runtime Environment (JRE),...

Více

Instalační manuál

Instalační manuál distribuce od jiných výrobců nemusí aplikaci plně podporovat, tj. před instalací nejdříve odstraňte již nainstalované verze Javy (např. gcc-java či verze 1.6.x od Oracle či od BlackDown). Pokud to ...

Více

Principy programovac´ıch jazyk˚u a objektove orientovaného

Principy programovac´ıch jazyk˚u a objektove orientovaného Úlohy k procvičení: Který typ rozlišeného textu se vyskytuje typicky v úvodu kapitoly. Který typ rozlišeného textu se vyskytuje v závěru výkladové části? Na konci každé kapitoly bude určité shrnutí...

Více

APM Automagazín 2014_2

APM Automagazín 2014_2 neboli systém pro sledování tlaku v pneumatikách, který v reálném čase informuje řidiče o jeho případném poklesu. Dosud nebyl povinný a využívala ho převážně auta vyšších tříd nebo střední třídy s ...

Více

pedagogická fakulta zápočtová práce databáze divadelních souborů

pedagogická fakulta zápočtová práce databáze divadelních souborů 7. Závěr.............................................................................................................................................. 12

Více