Součet a průměr

Teď, když umíte seznam projít, se podívejte, k čemu se takové cykly používají nejčastěji. První vzor sečte všechny prvky. Znáte ho z lekce o cyklech: proměnná, která před cyklem začíná na 0 a v každém průchodu roste. Tolik litrů mléka dala kráva Bella za čtyři dny:

local mleko = {12, 15, 11, 14}
local celkem = 0
for _, litry in ipairs(mleko) do
    celkem = celkem + litry
end
print("Celkem: " .. celkem .. " litrů")

Vypíše:

Celkem: 52 litrů

celkem začíná na 0, protože než něco přičtete, je součet nula. V každém průchodu cyklus přičte jeden prvek: po prvním průchodu je celkem 12, pak 27, 38 a nakonec 52. print je až za cyklem, kdy je součet hotový. Uvnitř cyklu by vypsal každý mezisoučet.

Průměr je součet vydělený počtem prvků, tedy #mleko:

local mleko = {12, 15, 11, 14}
local celkem = 0
for _, litry in ipairs(mleko) do
    celkem = celkem + litry
end
local prumer = celkem / #mleko
print("Průměr: " .. prumer)

Vypíše:

Průměr: 13.0

Vzpomeňte si z lekce o proměnných, že / dává vždycky desetinné číslo, i když výsledek vyjde celý, takže 52 / 4 je 13.0. A když celý nevyjde, můžete dostat spoustu číslic. Pro mléko za celý týden, {12, 15, 11, 14, 13, 16, 9}, je průměr 90 / 7, což se vypíše jako 12.857142857143. Pro výpis ho zaokrouhlete pomocí string.format s %.1f, na jedno desetinné místo:

print(string.format("Průměr: %.1f litru", 90 / 7))

Vypíše:

Průměr: 12.9 litru

Lua píše desetinnou tečku, ne čárku. A na průměr nepoužívejte //: zaokrouhlí dolů na celé číslo a 90 // 7 je jen 12.

Pozor na prázdný seznam. Jeho součet je 0 a délka také 0, takže průměr by byl 0 / 0, a to vůbec není číslo. Lua program nezastaví: spočítá zvláštní hodnotu nan (z anglického not a number, není číslo) a na tomto webu print(0 / 0) vypíše -nan. Když seznam může být prázdný, zkontrolujte před dělením #mleko > 0.

Ze součtu a průměru často vyplynou další otázky, třeba které dny byly nadprůměrné. Na to nejdřív potřebujete průměr, takže seznam projdete podruhé, až když první cyklus skončí.

Pokyny

Sečtěte mléko: vytvořte lokální proměnnou celkem s hodnotou 0, projděte cyklem mleko a každý prvek přičtěte k celkem. Za cyklem vypište Celkem: 90 litrů.

Z celkem a #mleko spočítejte průměr a vypište ho pomocí string.format s jedním desetinným místem: Průměr: 12.9 litru.

Spočítejte dny, kdy Bella dala víc mléka, než je průměr. Projděte mleko znovu, každý prvek porovnejte s průměrem (ne se zaokrouhleným) a za cyklem vypište Nad průměrem: 4 dny.

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

8/11