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