Grafy - vědecká kalkulačka


Funkce appletu

Applet je velmi chytrou "vědeckou" kalkulačkou umožňující zobrazování grafů funkcí jedné proměnné.

Kalkulačka umožňuje definovat jakoukoliv funkci s libovolným počtem parametrů s možností použití standardních operátorů (+, - (unární / binární), *, /, ^ (mocnina)) nebo některých z již definovaných (jak programem, tak uživatelem) funkcí. Seznam definovaných funkcí se nachází v okně "Function list". Pokud nadefinujeme funkci s jedním parametrem, je automaticky vykreslen její graf.
V předem definovaných funkcích se nachází několik funcí s libovolným počtem parametrů - lze volat s 0..n parametry, takovéto funkce však není možno definovat později uživatelem, zápis definice funkce by totiž bylo velmi nesnadné provést.
Funkce je též možno přetěžovat - lze definovat více funkcí se stejným jménem, ale různým typem parametrů.
Případné náměty k přidání dalších standardních funkcí mi prosím napište

Též je možno definovat proměnné (chovají se jako funkce bez parametru), výpis již definovaných naleznete v okně "Variable list".

Jediný uživatelem zjistitelný rozdíl mezi funkcemi a proměnnými je v možnosti předefinování. Proměnné (až na předem definované konstanty - jména velkými písmeny) předefinovat lze, zatímco funkce ne. O předefinování i případné nemožnosti předefinování nás kalkulačka informuje. Po předefinování se nová hodnota samozřejmě projeví ve všech dalších definicích, kde je daná proměnná použita.

Dalšími možnostmi kalkulačky jsou výpočet hodnoty výrazu   a vyhledání identifikátoru. Pro výpočet je nutno před výraz uvést operátor =, výraz je shodný s definicí proměnné. Pro zjištění existence identifikátoru stačí napsat název identifikátoru a program nalezne definici identifikátoru s daným názvem a minimálním počtem parametrů. Pokud by jsme chtěli vyhledat funkci s daným počtem parametrů, zapíšeme její "volání". Pokud je nalezena proměnná, je vypsána její hodnota, funkce s jedním parametrem je vykreslena.


Syntaxe definic identifikátorů

Definice funkce  ...  fce(x,y,z) = x + sin(y) ^ 2 + (x - z) * y
Před přiřazením je definován název funkce a parametry použité při definici. V samotné definici se mohou čísla, parametry uvedené před přiřazením (zastíní stejně pojmenované proměnné) a již definované proměnné. Samozřejmě lze vložit volání již definovaných funkcí a vše lze spojovat standardními operátory.

Definice proměnné  ...  prom = prom1 + sin(PI) + 3
Před přiřazením se nachází název proměnné, definice je obdobná definici funkci, jen nejsou žádné parametry - lze použít jen číslo či již definovanou proměnnou.

Výpočet hodnoty výrazu  ...  = prom1 + sin(PI) + 3
Shodné s definicí proměnné, není uveden název proměnné - nepřiřazuje se.

Vyhledání identifikátoru  ...  JménoIdentifikátoru
Uvedeme pouze hledané jméno, program se pokusí nalézt odpovídající identifikátor s minimálním počtem parametrů, vypíše výsledek - existuje + počet parametrů / neexistuje a případně vypíše hodnotu (proměnná) či vykreslí graf (funkce s jedním parametrem).

Vyhledání funkce  ... JménoFunkce(x,y,z)
Uvedeme jméno funkce a parametry volání (pro vyhledání je důležitý pouze počet parametrů), program se danou funkci pokusí nalézt a informuje stejně jako u vyhledání identifikátoru.

Celá syntaxe je case-sensitiv (záleží na velikosti písmen), na vložených mezerách či tabulátorech nezávisí.
Případné syntaktické chyby jsou samozřejmě hlášeny a program nastaví pozici chyby v překladovém políčku.

Definici gramatiky syntaktického analyzátoru naleznete zde.


Ovládání

Program se skládá ze tří v podstatě nezávislých částí. Nejdůležitější částí je samotné rozhraní "překladače" - textové pole slouží k zadání překládaného výrazu, pro provedení překladu stačí v tomto políčku stisknou klávesu ENTER či použít buton Execute. O výsledku překladu nás informuje výstup v druhém řádku, barva hlášky je rozlišena podle typu výstupu - oznamovací / chybová.
Pro označení obsahu textového pole lze použít klávesu ESC.

Částí přímo na překladač navazující jsou okna s výpisem definovaných funkcí a proměnných. Obsah těchto oken se automaticky obnovuje při přidání identifikátoru, při případných chybách (snad se nevyskytují) lze též použít butonu Refresh.
K vyvolání (zobrazení) oken lze použít butony ve spodní části appletu.

Rozšiřující částí je graf a jeho ovládání, který se nachází ve středu appletu. Na ploše grafu se vykreslují funkce - standardně je zobrazen interval <-10 .. 10> na obou osách, elipsa kolem počátku je jednotková kružnice (pro usnadnění orientace v měřítku).
Jména vykreslených funkcí jsou zobrazena v poli vedle grafu, buton Delete slouží k mazání všech funkcí v grafu.


Zjištěné nedostatky

Barvičky výstupu překladače někdy nefungují přesně tak, jak by měly. Je to chyba prohlížeče, ale nastává jen někdy, proto je dosti těžké pokusit se ji odstranit. Ale třeba se podaří.

V InternetExploreru nefunguje zobrazení oken výpisu. Není to chyba programu, ale prohlížeče. Pokud by někdo věděl, jak to vyřešit, ať mi dá prosím vědět.

Při nalezení syntaktické chyby není pozice chyby nastavena přesně, použije se aktuální pozice lexikálního analyzátoru a proto při chybách, které se zjistí až po přečtení dalších lexikálních elementů je pozice posunuta. Pro zjištění přesné pozice by bylo třeba dosti složitého algoritmu a dle mého názoru je popis chyby ve výstupu dostatečný.


Připravované dodělávky

Pokusím se umožnit přepsání funkcí pomocí dotazu na přepsání - musím na to vytvořit dialog.

Budu se snažit rozšířit možnosti grafu, a to: