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ší.
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;
.
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;
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.
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?"));