Cyklus while

Ema každý večer sbírá vejce od slepic. Program, který by vypsal její plán na týden, by mohl mít sedm skoro stejných řádků s print. Na celou sezónu by jich potřeboval stovku. Programy takovou opakovanou práci dělají pořád: projdou každý den sezóny, každý záhon na poli nebo 60krát za sekundu překreslí obrazovku hry. K tomu slouží cykly. Cyklus je část kódu, která se provádí znovu a znovu.

Nejjednodušší cyklus v Lua je while (dokud). Opakuje blok kódu, dokud platí jeho podmínka:

local den = 1
while den <= 5 do
    print("Den " .. den)
    den = den + 1
end

Vypíše:

Den 1
Den 2
Den 3
Den 4
Den 5

Cyklus while vypadá podobně jako if: klíčové slovo, podmínka a blok kódu, který končí slovem end. Jen místo then má do. Rozdíl je v tom, že if provede svůj blok nejvýše jednou, kdežto while se k podmínce stále vrací. Krok za krokem:

  1. Program vytvoří proměnnou den s hodnotou 1.
  2. Zkontroluje podmínku den <= 5. Platí, takže provede blok: vypíše Den 1 a den = den + 1 zvýší den na 2.
  3. Vrátí se k podmínce. 2 <= 5 stále platí, takže vypíše Den 2 a zvýší den na 3.
  4. A tak dále, dokud nebude den rovno 6. Pak podmínka neplatí, cyklus skončí a program pokračuje za jeho end.

Jednomu provedení bloku se říká průchod cyklem (také iterace). Tento cyklus má pět průchodů. Pro sezónu o 100 dnech by stačilo změnit 5 na 100.

Blok odsazujte o 4 mezery, stejně jako u if. Na první pohled pak uvidíte, co se opakuje. Kód za end se provede jen jednou, až cyklus skončí:

local zahon = 1
while zahon <= 3 do
    print("Zalévám záhon " .. zahon)
    zahon = zahon + 1
end
print("Všechny záhony jsou zalité.")
Zalévám záhon 1
Zalévám záhon 2
Zalévám záhon 3
Všechny záhony jsou zalité.

Všimněte si řádku zahon = zahon + 1. Lua nemá += ani ++, takže zvětšení proměnné musíte napsat celé. Něco v bloku musí měnit proměnnou z podmínky, aby podmínka jednou přestala platit. Bez toho by cyklus nikdy neskončil. Co se pak stane, uvidíte v dalším cvičení.

Na začátku vás nejspíš potkají dvě chyby. Když napíšete then jako u if, program se vůbec nespustí:

local den = 1
while den <= 3 then
    print("Den " .. den)
    den = den + 1
end
main.lua:2: 'do' expected near 'then'

A když zapomenete end, Lua vám dokonce prozradí, ke kterému cyklu chybí:

local den = 1
while den <= 3 do
    print("Den " .. den)
    den = den + 1
main.lua:4: 'end' expected (to close 'while' at line 2) near <eof>

<eof> znamená „end of file“, konec souboru: Lua došla na konec programu a pořád čekala na end.

Pokyny

Smažte tři řádky s print. Místo nich vytvořte lokální proměnnou den s hodnotou 1. Cyklus s ní bude počítat dny.

Pod ni napište cyklus while, který poběží, dokud bude den menší nebo rovno 7. V cyklu vypište den stejně jako smazané řádky a potom den zvyšte o 1. Program vypíše:

Den 1: sběr vajec
Den 2: sběr vajec
Den 3: sběr vajec
Den 4: sběr vajec
Den 5: sběr vajec
Den 6: sběr vajec
Den 7: sběr vajec

Za cyklem, pod jeho end, vypište Po cyklu je den a hodnotu proměnné den. Výpis skončí takto:

Den 7: sběr vajec
Po cyklu je den 8

Proměnná skončí na 8, a ne na 7, protože se cyklus zastaví, až když podmínka neplatí.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

1/10