Stručný přehled příkazů, konstrukcí a funkcí jazyka

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ářů.

Obecné informace

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 { }.

Základem je procedura

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.

Příkazy pro ovládání želvičky

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;

Barva a tlošťka čáry, další příkazy

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;.

Cykly

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.

Příkaz 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é a logické výrazy

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í

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.

Volání procedur

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).