Programování v Maple - jazyk MPJ | |
Úvodní slovo Autor MAPLESystém MapleZáklady práce Konstrukce Maple Definice funkcí Zjednodušování Řešení rovnic Grafické zpracování Programování MatematikaDiferenciální početIntegrální počet Křivkový integrál Plošný integrál Knihovnyplotsstudent Student VectorCalculus InformaceDownloadOdkazy Publikace |
Pro vytváření vlastních procedur v systému Maple je vytvořen speciální jazyk. Tato kapitola není úplným referenčním textem, je jen základem pro pochopení struktur vlastních procedur. Při programování se velmi často používají cykly a podmínky, a proto i systém Maple tyto řídící struktury obsahuje. Zopakujme syntaxi pro vytvoření vlastní funkce (procedury). Struktura vypadá následovně název_fce := proc(param1,param2,…) Nejprve zvolíme název funkce a pak pomocí klíčového slova proc vytvoříme funkci s parametry, které jsou uzavřeny do kulatých závorek. Dále následuje tělo funkce , ve kterém se většinou vyhodnotí zadané parametry a jejich typy, provedou se příslušné příkazy a konstrukce se ukončí pomocí end proc .
Nyní se podívejme na řízení toku programu pomocí struktury (podmínky) Je-li podmínka za if splněna (tj. + ), jsou provedeny příkazy uvedené za then . Pokud splněna není ( tj. - ), provedou se příkazy uvedené za else . V obou případech se hned po provedení příkazů pokračuje v programu. Existuje ještě jiná možnost zápisu podmínky s if , a to
Nyní si na příkladu hledání maxima ze dvou zadaných čísel ukažme použití těchto dvou struktur. Z pedagogických důvodů budeme požadovat i informaci o případné rovnosti čísel. Příklad později rozšíříme na hledání maxima z libovolného počtu zadaných čísel, a to pomocí cyklů typu for-do nebo while-do. > max1:=proc(a,b) # užití if-else-end if if a&<>b then if a>b then return a; else return b; end if; else return a=b; end if; end proc: > max1(5,-6); max1(-5,6); max1(-6,-6);
Výše uvedenou proceduru lze samozřejmě zapsat i bez použití else , ale jako ukázka je vhodnější výše uvedený kód. Nyní s výhodou užijeme struktury s elif . > max2:=proc(a,b) # užití if-elif-else-end ifif a>b then return a; elif a<b then return b; else return a=b; fi; # alternativa k end if end proc: > max2(5,-6); max2(-5,6); max2(-6,-6); V předchozím zdrojovém kódu si hlavně všimněte předposledního řádku, kde je uvedena alternativa ukončení k end if , tj. fi . Nyní přistupme k dalším strukturám, půjde o cykly. Začneme s cyklem while-do-end do . Přesnější syntaxe je Vraťme se k proceduře hledání maxima. Nyní ji změníme pro libovolný počet zadaných parametrů s využitím cyklu while-do .
> max3:=proc() # podmínka while-do-end do max3(1); max3(0,-65,76); max3(0,-6,76,-98.25,78,78); Přistupme k vysvětlení předchozí procedury. Pokud potřebujeme nějaké vlastní (lokální) proměnné, které budou pouze v těle procedury, je nutné užít klíčového slova local. V případě, že tyto proměnné nejsou takto předem deklarovány, Maple ohlásí varování.
Pokud znáte jiný programovací jazyk, např. jazyk C, pravděpodobně byste v tomto případě použili jiný cyklus a to cyklus for . I zde je to možné, protože i Maple nabízí tento často užívaný cyklus. Podívejme se blíže na jeho dvě možné syntaxe. for proměnná from odkud by krok to kam while podmínka do příkazy end do nebo for proměnná in struktura while podmínka do příkazy end do V prvním příkazu se proměnná inicializuje hodnotou uvedenou za klíčovým slovem from , zvyšovat se bude o hodnotu kroku dokud nedosáhne hodnoty kam . Dále se vyhodnotí podmínka příkazu while a pokud je splněna, jsou provedeny příkazy . Následující obrázek vše vysvětlí lépe. Ukažme si to na dalším možném zápisu naší známé procedury hledání maxima.
> max4:=proc() Volání funkce. > max4(5,-6); > max4(); Error, (in max4) invalid subscript selector > max4(0,-65,76); > max4(0,-6,76,-98.25,78,78); Nyní se podívejme na cyklus for-in-do . Mějme seznam čísel, které chceme postupně sčítat, dokud nedosáhneme určité hodnoty.
Výše uvedený zdrojový kód je snáze čitelný. Všimněme si, že místo proměnné max je užita proměnná mmax , a to proto, že max je klíčovým slovem systému Maple. V předchozích zdrojových kódech mohla být proměnná max používána bez nebezpečí, protože byla deklarována jako lokální, pomocí local .
|
Ing. Vladimír Žák |