ZÁPOČTOVÁ PRÁCE z UIR
Transkript
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.
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),...
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 ...
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í...
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
...
pedagogická fakulta zápočtová práce databáze divadelních souborů
7. Závěr.............................................................................................................................................. 12