Vnořené cykly
Zatím každý print ukončil svůj řádek. Když chcete napsat několik věcí vedle sebe na jeden řádek, má Lua io.write. Ten zapíše své hodnoty přesně tak, jak jsou: bez nového řádku na konci a bez tabulátorů mezi nimi:
io.write("Vejce: ", 12)
io.write(" a mléko")
print()
print("Vejce:", 12)Vejce: 12 a mléko
Vejce: 12Prázdný print() vypíše jen nový řádek: tady ukončí řádek, který začal io.write. Další dva rozdíly: io.write zapíše desetinné číslo 5.0 jako 5 (print vypíše 5.0) a bere jen texty a čísla. Cokoli jiného nejdřív převeďte pomocí tostring:
io.write(true)main.lua:1: bad argument #1 to 'write' (string expected, got boolean)A teď k cyklům. Cyklus může obsahovat jiný cyklus. Takovému cyklu se říká vnořený cyklus: v každém průchodu vnějšího cyklu proběhne vnitřní cyklus celý. Emino pole slunečnic má 3 řady po 5 slunečnicích:
for rada = 1, 3 do
for sloupec = 1, 5 do
io.write("*")
end
print()
end*****
*****
*****Vnější cyklus začne první řadou a vnitřní cyklus zapíše pět hvězdiček vedle sebe. Za vnitřním cyklem print() řadu ukončí. Teprve pak se vnější cyklus posune na druhou řadu a vnitřní cyklus zapíše znovu pět hvězdiček. Blok vnitřního cyklu proběhne 3 × 5 = 15krát. Proměnné obou cyklů pojmenujte různě (tady rada a sloupec), ať víte, která je která.
Všimněte si, kde je print(): za end vnitřního cyklu, ale pořád uvnitř vnějšího. Uvnitř vnitřního cyklu by dal každou hvězdičku na samostatný řádek. Za vnějším cyklem by všech 15 hvězdiček skončilo na jednom dlouhém řádku.
Vnitřní cyklus může používat proměnnou vnějšího cyklu. Když poběží od 1 do rada, dostane první řada jednu hvězdičku, druhá dvě a tak dál:
for rada = 1, 4 do
for sloupec = 1, rada do
io.write("*")
end
print()
end*
**
***
****Místo io.write můžete každou řadu také poskládat jako text: začněte prázdným textem "", ve vnitřním cyklu k němu přidávejte pomocí .. a za vnitřním cyklem ho vypište. Je to stejný vzor jako sčítání, jen s textem:
for rada = 1, 2 do
local radek = ""
for sloupec = 1, 3 do
radek = radek .. "*"
end
print(radek)
end***
***Ještě jedna věc: break ve vnitřním cyklu ukončí jen vnitřní cyklus. Vnější cyklus pokračuje dalším průchodem.
Jak psát:
Pokyny
Nakreslete Emino pole: 4 řady a v každé 6 slunečnic *. Použijte dva vnořené cykly for, vnější s proměnnou rada a vnitřní s proměnnou sloupec. Vnitřní cyklus zapíše jednu * pomocí io.write. Za ním, pořád uvnitř vnějšího cyklu, řadu ukončí print().
******
******
******
******Pod pole očíslujte Eminy záhony: 3 řady po 4 záhonech, očíslované od 1 do 12, řadu po řadě. Před cykly vytvořte lokální proměnnou zahon s hodnotou 0. Ve vnitřním cyklu ji zvyšte o 1 a zapište pomocí io.write(zahon, " "). Každou řadu ukončete pomocí print(). Čísla budou vypadat takto:
1 2 3 4
5 6 7 8
9 10 11 12Každá řada končí mezerou za posledním číslem. Není vidět a nevadí.
Začněte programovat zdarma
9/10