Manuál k MatMatu

  1. Popis programu a uživatelská příručka
    1. Co je to MatMat
    2. Co to umí a jak se to dělá?
  2. poznámky k programu
    1. Co bylo použito
    2. Základní popis
    3. 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