Procházení seznamu

Zatím jste indexy psali jako čísla: plodiny[1], plodiny[2]. Index ale může být i proměnná. Když má i hodnotu 2, je plodiny[i] totéž co plodiny[2]. A cyklus for umí s proměnnou i projít všechny indexy od 1 do délky seznamu:

local plodiny = {"mrkev", "brambory", "dýně"}
for i = 1, #plodiny do
    print(i .. ". " .. plodiny[i])
end

Vypíše:

1. mrkev
2. brambory
3. dýně

V prvním průchodu má i hodnotu 1 a cyklus vypíše plodiny[1]. Ve druhém průchodu vypíše plodiny[2] a tak dále až po #plodiny, poslední index. Cyklus funguje pro seznam jakékoli délky: pro sto plodin proběhne stokrát a pro prázdný seznam vůbec, protože for i = 1, 0 proběhne nulakrát.

Protože Lua počítá od 1, jde cyklus od 1 do #plodiny. Časté jsou dvě chyby. Začátek od 0 přidá na začátek průchod navíc, ve kterém je prvek nil:

local plodiny = {"mrkev", "brambory", "dýně"}
for i = 0, #plodiny do
    print(i, plodiny[i])
end

Vypíše:

0	nil
1	mrkev
2	brambory
3	dýně

Cyklus až do #plodiny + 1 přidá průchod navíc na konec. S .. program vypíše všechny plodiny a pak se zastaví:

local plodiny = {"mrkev", "brambory", "dýně"}
for i = 1, #plodiny + 1 do
    print("Plodina: " .. plodiny[i])
end
Plodina: mrkev
Plodina: brambory
Plodina: dýně
main.lua:3: attempt to concatenate a nil value (field '?')

S indexem v proměnné umí cyklus víc než jen vypsat prvky popořadě. Umí jít pozpátku, s krokem -1 od posledního indexu k prvnímu:

local plodiny = {"mrkev", "brambory", "dýně"}
for i = #plodiny, 1, -1 do
    print(plodiny[i])
end

Vypíše:

dýně
brambory
mrkev

Umí pracovat se dvěma seznamy naráz. Když mají hodnoty, které k sobě patří, v obou seznamech stejný index, jedno i přečte obě. Tady je dny[i] počet dní, za který vyroste plodiny[i]:

local plodiny = {"mrkev", "brambory", "dýně"}
local dny = {3, 4, 7}
for i = 1, #plodiny do
    print(plodiny[i] .. ", dny růstu: " .. dny[i])
end

Vypíše:

mrkev, dny růstu: 3
brambory, dny růstu: 4
dýně, dny růstu: 7

A umí prvky měnit, protože vejce[i] = … funguje i s indexem v proměnné. Tento cyklus zdvojnásobí každé číslo v seznamu:

local vejce = {4, 6, 5}
for i = 1, #vejce do
    vejce[i] = vejce[i] * 2
end
print(vejce[1], vejce[2], vejce[3])

Vypíše:

8	12	10

Pokyny

Napište cyklus for, jehož proměnná prochází indexy seznamu semena od 1 do #semena.

V cyklu vypište každé semínko s jeho cenou ze seznamu ceny:

mrkev: cena 2
brambory: cena 3
dýně: cena 5
jahody: cena 4

Hugo zdražil každé semínko o 1 minci. Pod cyklus napište druhý cyklus, který ke každému prvku seznamu ceny přičte 1.

Pod něj vypište semínka s cenami znovu, stejně jako v prvním cyklu. Výpis teď ukazuje ceny před změnou i po ní a končí takto:

mrkev: cena 3
brambory: cena 4
dýně: cena 6
jahody: cena 5

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

5/11