Další příkazy větvení

V minulé kapitole jsme si ukázali, jak může program měnit své chování na základě informací zvnějšku. Byl to však jen lehký úvod. Možnosti většiny programovacích jazyků včetně Želví grafiky jsou v tomto ohledu daleko větší.

Rozšířená syntaxe příkazu pokud

V minulé kapitole jsi se naučil(a) základní syntax příkazu pokud. Tento příkaz toho však umí daleko více. Rozšířená syntaxe příkazu pokud vypadá následovně:

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;

Tedy, Želví grafika vyhodnotí logický výraz napsaný za prvním pokud. Je-li výraz pravdivý, provede se skupina příkazů, které se nacházejí za prvním pokud a před prvním nebo pokud. Po jejich provedení skočí až za konec celé konstrukce, za klíčové slovo konec;. Není-li první výraz pravdivý, vyhodnotí logický výraz napsaný za prvním nebo pokud. Pokud je pravdivý, provede příkazy nacházející se mezi druhým a třetím nebo pokud. Pak skočí až za příkaz konec;. Jestliže není pravdivý žádný z logických výrazů, provedou se příkazy zapsané mezi jinak a konec;.

Části nebo pokud a jinak mohou samozřejmě scházet. Povolená je tedy i syntax pokud podmínka: příkazy jinak: příkazy konec; či pokud podmínka1: příkazy nebo pokud podmínka2: ... konec;.

Barevné bludiště

Ukážeme si jeden příklad, který ilustruje použití rozšířené syntaxe příkazu pokud. Náš příklad s bludištěm obohatíme o barvy. Podle toho, jak dlouhá úsečka se zrovna kreslí, se rozhodne, jakou barvu pro ni vybereme.

at $delka je cele;
pocitej $delka od 5 do 200 po 3:
    {na základě velikosti proměnné $delka se rozhodne,}
    {jakou barvou se bude kreslit}
    pokud $delka < 50:
        barva bud cerna;
    nebo pokud $delka >= 50 a $delka < 100:
        barva bud zelena;
    nebo pokud $delka >= 100 a $delka < 150:
        barva bud oranzova;
    jinak:
        barva bud modra;
    konec;
    vpred o $delka;
    otoc o 90;
konec;

Cyklus dokud

Na tomto místě se seznámíme s dalším druhem cyklu, a to sice cyklem dokud. Jeho syntaxe je jednoduchá: dokud podmínka: tělo_cyklu konec;. Tělo cyklu se vykonává tak dlouho, dokud podmínka platí. Na příkladě si ukážeme, jak provést stejnou věc, kterou dělá příkaz opakuj, bez příkazu opakuj a bez příkazu počítej.

at cele $a = 1;
dokud $a <= 4:
    vpred o 100;
    otoc o 90;
    at $a = $a + 1;
konec;

Na začátku uložíme do nově vytvořené proměnné jedničku. V každém průchodu cyklem hodnotu proměnné zvětšíme o 1, zároveň testujeme, jestli hodnota proměnné nepřesáhla čtverku. Jakmile ji přesáhne, cyklus končí, protože již neplatí podmínka uvedená za dokud. Tělo cyklu se proto vykoná přesně čtyřikrát.

Cyklus provadej

Aby toho nebylo málo, představíme si ještě jeden cyklus, a to cyklus provadej. Jeho syntaxe je podobná syntaxi předchozího cyklu: provadej: tělo_cyklu nez podmínka_ukončení;.

Tělo cyklu se provádí do té doby, dokud neplatí podmínka ukončení. Jakmile je podmínka ukončení pravdivá, cyklus končí. Následující ukázka v každém průchodu cyklem nakreslí krátkou čárku a uživatele se zeptá, jesli ji má ještě prodloužit. Jakmile uživatel odpoví Ne, cyklus končí.

provadej:
    vpred o 10;
nez ne (otazka ("Mam carku jeste prodlouzit?"));