|
Manuál k MatMatu
- Popis programu a uživatelská příručka
- Co je to MatMat
- Co to umí a jak se to dělá?
- poznámky k programu
- Co bylo použito
- Základní popis
- Základni unity
1. Popis programu a uživatelská příručka
Co je to MatMat
Matmat je kreslička funkcí jedné proměnné.
Co to umí a jak se to dělá
Co to umí:
- Interaktivně znázornit vzhled funkcí jedné proměnné
- V tomto směru umožňuje:
- Neomezené množství vykreslovaných funkcí najednou
- Volbu barvy, tloušťky pery a detailů pro každou z funkcí
- Klasické operace jako přiblížení, oddálení, posun po grafu
- Použití parametrů v zadání vzorce
- Derivovat zadanou funkci (manuálním) způsobem, tedy dle derivačních vzorců.
- Vytvořit tečnu v daném bodě
- Vytvořit Taylorův polynom stupně 1 až 10 v daném bodě.
- Vykreslit vzorec funkce
- Tisk plátna
- Uložení plátna jako BMP
A jak se to dělá
Myslím, že ovládání není tak složité ... a já tak strašně nerad píšu ... tak jenom stručně.
Práce s parametry
Použijete-li ve vzorci parametr, objeví se vám na hlavním panelu příslušné ovládací prvky,
kde můžete hodnoty parametrů měnit. Změnu vždy potvrzujte stiskem klávesy Enter. Při zadávání
můžete použít vzorec (např. 2*8*pi) pro určení hodnoty, ale nikoliv parametr či proměnnou.
Změna parametru se projeví na všech funkcích v daném projektu. Vyjímku
tvoří Taylorovy polynomy a tečny, které na změnu parametru nereagují (pracuje se na tom :=).
Klávesové zkratky
CTRL + V |
|
Vložení nové funkce |
CTRL + C |
|
Editace zvolené fce |
CTRL + X |
|
Smazání zvolené fce |
CTRL + A |
|
Kresba funkcí |
CTRL + F |
|
Vypnutí / zapnutí okna Seznam funkcí |
2. Poznámky k programu
a. Co bylo použito
Programováno v Delphi 6 za pomocí standartních unit + unita printers a math.
Inspirace byla čerpána z Topferových algoritmů
b. Základní popis
Vzorec je z textu převeden do postfixu a následně do vyhodnocovacího stromu. Základním
objektem je objekt Pprvek, který představuje elementární část výrazu.
Podle hodnoty ID objektu pak program rozlišuje o co jde:
0 | |
hodnota |
1 .. 45 | |
vyhrazeno pro speciální hodnoty jako e, pi ... |
47 .. 82 | |
parametry - pozice se počítá podle vzorce (ORD(pismeno) - 50) |
98 | |
proměnná x |
99 | |
proměnná y - zatím nedoděláno |
101..1000 | |
operace se dvěma operandy |
1001..3000 | |
operace - funkce s jedním operandem |
3001..3002 | |
závorky - nevytváří se, slouží pouze při tvorbě stromu |
Dále má dva ukazatele na své budoucí operandy a kastlík pro hodnotu.
Z funkcí objektu jsou důležité fce
vyhodnot - rekurzivne vyhodnotí celý výraz. Pokud výraz není definován, pak vrací argument def s hodnotou false
id2name - vypíše své jméno
Pozn:
Možná se divíte, proč na objekt ukazuju ještě vzlášť ukazatelem. Je to proto, že
jsem v době, kdy jsem to začal psát jsem nevěděl, že se objekty v Delphi automaticky
alokujou dynamicky a pozdějš se mi to už nechtělo překopávat. Takže jsem použil klasickou
Paskaláckou Deklaraci.
Další objekty:
Pzas {zasobnik na prvky obousmerny s hlavou} a jeho kastlik Psuplik
Pzasfce {zasobnik na funkce obousmerny s hlavou} a jeho kastlik Pvyraz
Typ:
velikost - slouží při kresbě výrazu na plátno.
c. Základni unity
Jsou popsány pouze nejdůležitější funkce a procedury
Math_stuff, která obsahuje:
- funkci text2strom na převod výrazu do vyhodnocovacího stromu
- a její pomocnou funkci Prvek, která vrací z textového výrazu jeho další operand / hodnotu ...
- rekursivní funkci derivuj, která derivuje výraz podle derivačních vzorců
- používá funkci isx, která zjišťuje existenci proměnné v daném výrazu a subvýrazu
- funkci Taylor
- funkci is_param, která zjišťuje, zda je ve vzorci parametr - užívá se při úpravě - zjednodušování
- funkci uprav_vyraz, který se snaží upravit výraz po manuálním derivování do použitelného stavu, tedy odstraňuje zbytečné operace jako +0 *1 ^1 atd.
Objekty, která obsahuje:
- Deklarace objektů a typů .. viz výše.
- Proceduru uvolni - uvolňuje paměť
main_ovl, která obsahuje:
- funkci vypis_výraz, která rekursivně přepíše výraz ze stromu do stringu, používá
funkci zavorky k detekci nutnosti závorek ve výrazu
- funkci kresli_výraz, která rekursivně vykreslí výraz na Tcanvas, používá
funkci zpocti_velikost, která počítá velikost výrazu při dané velikosti a druhu písma.
kalkulacka, která obsahuje:
-
Funkci kresli_graf, která vykreslí grafy funkcí v zásobníku na daný Tcanvas.
Obstarává i kresbu vzorců užívaje procedury z main_ovl.
ostatní unity obsahují už většinou pouze obslužné procedury a funkce
|
|