Tato stránka je určena pro ty, kdo mají s programováním zkušenosti. Seznámí vás se všemi příkazy (ovládání želvičky i jiné), konstrukcemi (cykly, podmínky) i funkcemi (matematické a logické), které interpret Želví grafiky zná. Přehled je stručný, bez dlouhých komentářů.
Programovací jazyk používaný programem Želví grafika je plně interpretovaný, výukový programovací jazyk, jehož klíčová slova vycházejí z českého jazyka. Je case-sensitive, k ukončování příkazů se používá středník, s netisknutelnými znaky (mezery a konce řádků) zachází stejně jako jiné běžné jazyky (Pascal, C, Java,...). Komentáře se uzavírají do složených závorek { }.
Každý program musí obsahovat alespoň jednu proceduru. Vytvoříte ji tak,
že na hlavním panelu tlačítek stisknente nová proc..
V editačním okně vyplňte seznam parametrů, které je třeba při
volání proceduře předat. Jednotlivé parametry se oddělují čárkou, každý
parametr má tvar typ_parametru název_proměnné
.
Typ parametru může nabývat některé z hodnot cele
(celočíselný
typ), desetinne
(desetinné číslo) nebo logicka
(logická proměnná). Při zavolání procedury bude hodnota parametru
uložena do proměnné daného názvu, název proměnné musí začínat znakem
dolar ($
) a dále smí obsahovat jen alfanumerické znaky.
Příklad seznamu parametrů:
cele $cislo1, desetinne $cislo2, logicka $tretiParametr
Do hlavní textové plochy napište kód procedury, tedy posloupnost příkazů, které se mají provést, když je procedura zavolána nebo spuštěna. Procedura se spustí dvojklikem na svůj název v seznamu v levé části okna. Pokud procedura bere nějaké parametry, je na ně uživatel po spuštění procedury dotázán.
Všechny příkazy se ukončují (nejen oddělují) středníkem.
Nejdůležitější příkaz je vpred o délka
, který
pohne želvičkou o délka
dopředu a zanechá za ní stopu.
Další stěžejní příkaz je otoc o úhel
, který otočí
želvičku po směru hodinových ručiček o úhel
stupňů. Záporný úhel způsobí otočení želvičky opačným směrem. Alternativně
lze též psát otoc o úhel doleva
. Následuje ukázka
s kódem procedury, která nakreslí dvakrát lomenou úsečku.
vpred o 100;
otoc o 90;
vpred o 50;
otoc o 90 doleva;
vpred o 100;
Chcete-li změnit tloušťku čáry, kterou želvička kreslí, použijte příkaz
tloustka bud tloušťka
, kde tlousťka
je celočíselný výraz. Barva se nastaví příkazem barva bud barva
,
kde barva
může nabývat hodnot cervena
,
zelena
, modra
, zluta
, bila
,
cerna
, fialova
, seda
, podzimni
,
oranzova
, ruzova
, bledemodra
, hneda
.
Pro smazání plochy, na niž se kreslí, slouží příkaz smaz!;
,
želvičku skryjete příkazem zelvicku skryj;
a opět zobrazíte
příkazem zelvicku ukaz;
.
Interpret Želví grafiky zná čtyři druhy cyklů. Nejjednodušší je cyklus
opakuj
. Jeho syntaxe je následující: opakuj počet
krat: tělo konec;
. Parametr počet
je celočíselný
výraz udávající, kolikrát se má provést tělo
. Procedura
s následujícím kódem nakreslí čtverec.
opakuj 4 krat:
vpred o 100;
otoc o 90;
konec;
Další typ cyklu je cyklus pocitej
. Ten dostane jako jeden
z parametrů název proměnné, dále pak počáteční hodnotu, koncovou hodnotu a přírůstek.
Před provedením první iterace uloží do proměnné počáteční hodnotu, po každém průchodu
cyklem ji zvýší a toto opakuje do doby, než by hodnota proměnné měla přesáhnout
koncovou hodnotu. Pak hodnotu proměnné nezvyšuje, ale ukončí cyklus. Syntaxe je
pocitej jméno_proměnné od počáteční_hodnota do
koncová_hodnota po přírůstek: tělo_cyklu konec;
.
Následující příklad vytiskne násobky čtyřky.
at $n je cele;
pocitej $n od 4 do 40 po 4:
hodnota $n;
konec;
Poznámka: než může být proměnná použitá, musí se vytvořit.
K vytvoření proměnné slouží příkaz at
, ještě o něm bude řeč.
Poznámka 2: klíčové slovo po
s uvedeným přírůstkem může scházet.
V takovém případě bude přírůstek 1.
Třetí typ cyklu je cyklus dokud
, což je obdoba cyklu while
,
který znáte z jiných jazyků. Syntaxi má následující: dokud logický_výraz:
tělo_cyklu konec;
. Tělo cyklu se provádí, dokud je logický
výraz pravdivý. Logické výrazy budou ještě dopodrobna rozebrány, použití
cyklu dokud
ilustruje tento jednoduchý příklad, opět se kreslí
čtverec. Ke změně hodnoty proměnné slouží opět příkaz at
s trochu
jinou syntaxí.
at cele $i = 1;
dokud $i <= 4:
vpred o 100;
otoc o 90;
at $i = $i + 1;
konec;
Obdobou Pascalského repeat ... until
je v Želví grafice cyklus
provadej
. Syntaxe je následující: provadej: tělo_cyklu nez
ukončovací_podmínka;
. Tělo cyklu se provádí tak dlouho, dokud
neplatí ukončovací podmínka.
at
a práce s proměnnými
Než je proměnná poprvé použita, musí být vytvořena. (Výjimkou jsou formální
parametry -- ty jsou vytvořeny, když se procedura zavolá.)
K vytvoření nové proměnné slouží příkaz at
. Syntaxe:
at jméno_proměnné je typ
.
Takto vytvoříme proměnnou s uvedeným názvem uvedeného typu.
Do proměnné přiřadíme hodnotu taktéž příkazem at
, ale s trochu
jinou syntaxí: at jméno_proměnné = hodnota
.
Tím do proměnné názvu jméno_proměnné
přiřadíme uvedenou hodnotu.
Vytvoření proměnné a přiřazení hodnoty do ní lze zkombinovat, syntaxe je pak
následující: at typ jméno_proměnné = hodnota
.
Tento zápis vytvoří proměnnou s uvedeným názvem a typem a přiřadí do ní
hodnota
.
Proměnnná může být vytvořena na téměř jakémkoliv místě v kódu procedury, nelze ji však "vytvářet" vícekrát nebo dodatečně měnit její typ. Pozor, příkaz vytvářející proměnnou v těle cyklu je chybou (při druhém průchodu narazí interpret na příkaz vytvářející již existující proměnnou a ohlásí chybu)! Jedná se tedy o jakousi kombinaci filosofie Pascalu (proměnné definovány ve speciálním bloku) a C++ (definovány na zcela libovolném místě).
Platnost proměnné trvá do doby, než skončí procedura, ve které byla proměnná definována. Volaná procedura má přístup k proměnným definovaným ve volající proceduře (náhrada za globální proměnné, které Želví grafika nemá), může je nicméně překrýt tím, že vytvoří vlastní lokální proměnnou téhož názvu (vytvoření proměnné stejného názvu v tomto případě chybou není). Jakmile volaná procedura skončí, začne platit opět proměnná volající funkce (obnoví se stav před překrytím).
Aritmetické výrazy používají stejné konvence jako v jiných jazycích (hvězdička
pro násobení, lomítko pro dělení, priorita operátorů). Rozdíl je pouze v zápise
desetinných čísel, Želví grafika používá desetinnou čárku, nikoliv tečku.
U všech operací je výsledkem desetinné číslo, právě když alespoň jeden z operandů
je desetinné číslo. Poror, toto se týká i dělení. Jestliže jsou dělenec i dělitel
celá čísla, provede se celočíselné dělení. Pokud nám to nevyhovuje, musíme alespoň
k jednomu operandu připsat desetinnou čárku a nulu
(6/5 = 1
, ale 6,0/5 = 1,2
).
Argumenty funkcí je třeba zapisovat do závorek. Želví grafika zná tyto
číselné funkce: sin
, cos
, ln
(přirozený
logaritmus), log
(dekadický logaritmus), odm
(odmocnina),
celacast
(celá část), zaokrouhlene
(vrací argument
zaokrouhlený dle známých pravidel), ctides
, cticele
.
Nyní podrobněji k posledním dvěma funkcím. Jako argument se jim předá
řetězec, funkce zobrazí okno, v něm argument použijí coby sdělení pro uživatele,
okno slouží k načtení číselné hodnoty (v prvním případě desetinné, ve druhém celé).
Hodnota, kterou uživatel zadá, se pak vrátí jako výsledek funkce. Zde je příklad.
at desetinne $x = ctides ("Zadej cislo.");
at desetinne $y = sin ($x);
napis "Sinus $x je roven $y.";
Poznámka: Příkaz napis
zobrazí okno s řetězcem, který se mu předá
jako parametr, ale nahradí v něm veškeré výskyty proměnných jejich hodnotami.
Co se týče logických výrazů, lze použít operátory porovnání (=
,
<
, >
, <=
, >=
),
logické spojky a
(konjunkce), nebo
(disjunkce), logickou
funkci ne
, která zneguje výrok, který jí předáme jako argument,
logickou funkci otazka
, které předíme jako argument řetězec --
výzvu pro uživatele, dunkce uživateli zobrazí okno s tlačítky Ano a Ne,
funkce vrací uživatelovu odpověď jako logickou hodnotu. Zde je ukázka.
provadej:
vpred o 10;
nez ne (otazka ("Mam pokracovat?"));
Větvení se provádí pomocí příkazu pokud
. Jeho syntax je následující:
pokud logický výraz 1:
příkazy, které se provedou, platí-li log. výraz 1
nebo pokud logický výraz 2:
příkazy, které se provedou, platí-li log. výraz 2
a neplatí logický výraz 1
...
nebo pokud logický výraz n:
příkazy, které se provedou, platí-li log. výraz n
a neplatí žádný z předešlých výrazů
jinak:
příkazy, které se provedou, pokud neplatí žádný
z log. výrazů 1 až n
konec;
Zde je příklad použití:
at cele $a = cticele ("Zadej cislo.");
pokud $a = 7:
napis "stastne";
nebo pokud $a = 13:
napis "nestastne";
jinak:
napis "Co ja vim?";
konec;
Části nebo pokud
a jinak
mohou samozřejmě
scházet.
Proceduru zavoláte tak, že napíšete místo příkazu její název a zakončíte středníkem. Pokud jí chcete předat nějaké parametry, oddělujte je posloupností několika mezer či prázdných řádků. Například:
maUzasnaProcedura ($a + 12) / 3
7 * ($b - 2)
2004;
dalsiProcedura 125 $a*15 (-5,5*$prom);
Nic nebrání volat procedury rekurzivně. Velikost zásobníku pro ukládání návratových pozic a lokálních proměnných je 500, velikost zásobníku parametrů činí 2000 (tedy pokud bude volaná procedura brát více než čtyři parametry, může dojít k přetečení, i když je hloubka volání menší než 500).