Největší hodnota
Další vzor hledá největší hodnotu. Představte si Emu na vesnické pouti, jak hledá nejtěžší dýni. Zvedne první z nich. Pak chodí od dýně k dýni, a kdykoli je některá těžší než ta zatím nejtěžší, zapamatuje si místo ní tuhle. Na konci ví, která dýně je nejtěžší. V kódu je „ta zatím nejtěžší“ proměnná:
local dyne = {8, 12, 7, 15, 10}
local nejtezsi = dyne[1]
for i = 2, #dyne do
if dyne[i] > nejtezsi then
nejtezsi = dyne[i]
end
end
print("Nejtěžší: " .. nejtezsi .. " kg")Vypíše:
Nejtěžší: 15 kgnejtezsi začíná prvním prvkem, a proto může cyklus začít indexem 2: první dýni není potřeba porovnávat se sebou samou (začít od 1 by ale fungovalo také). 12 je víc než 8, takže se nejtezsi změní na 12. 7 není víc než 12, ale 15 ano, a 10 už víc než 15 není, takže 15 zůstane až do konce.
Proč nezačít nulou? Protože 0 nemusí být mezi hodnotami. Kdyby byly všechny hodnoty záporné, třeba zimní teploty {-5, -2, -8}, zůstala by počáteční 0 největší a program by vypsal teplotu, která v seznamu vůbec není. První prvek je vždycky bezpečný začátek.
Nejmenší hodnotu najdete stejně, jen místo > použijete <.
Možná si vzpomenete na math.max, která vrací největší z několika čísel: math.max(8, 12, 7) je 12. Chce ale samotná čísla, ne seznam. math.max(dyne) se do seznamu nedívá: s jedinou hodnotou ji prostě vrátí zpátky, takže print(math.max(dyne)) vypíše table: 0x…. Pro seznam potřebujete cyklus.
Často potřebujete vědět i to, kde největší hodnota je. Pak si její index pamatujte ve druhé proměnné a obě proměnné měňte zároveň. Tady vám ipairs dá index i prvek najednou:
local dyne = {8, 12, 7, 15, 10}
local nejtezsi = dyne[1]
local indexNejtezsi = 1
for i, vaha in ipairs(dyne) do
if vaha > nejtezsi then
nejtezsi = vaha
indexNejtezsi = i
end
end
print("Dýně číslo " .. indexNejtezsi .. " váží " .. nejtezsi .. " kg")Vypíše:
Dýně číslo 4 váží 15 kgProtože Lua počítá od 1, je index rovnou číslo dýně, počítané tak, jak počítají lidé: čtvrtá dýně má index 4. S indexem se můžete podívat i do jiného seznamu, jehož prvky patří ke stejným pozicím, třeba do jmen pěstitelů, kteří dýně vypěstovali: pestitele[indexNejtezsi].
Když dvě dýně váží stejně, > si nechá první z nich, protože stejně těžká dýně ji nenahradí. S >= byste dostali tu poslední.
Jak psát:
Pokyny
Zjistěte, kolik nejvíc mincí Ema vydělala za jeden den. Vytvořte lokální proměnnou nejlepsi s prvním prvkem seznamu mince, projděte seznam, a kdykoli je prvek větší než nejlepsi, uložte ho do nejlepsi. Za cyklem vypište Nejvíc mincí: 52.
Zjistěte, který den to byl. Vedle proměnné nejlepsi vytvořte lokální proměnnou indexNejlepsiho s hodnotou 1 a v cyklu do ní uložte index pokaždé, když měníte nejlepsi. Za cyklem podle něj vezměte název dne ze seznamu dny a vypište Nejlepší den: úterý.
Ve druhém cyklu stejným způsobem najděte nejhorší den, ten s nejmenším počtem mincí. Vypište jeho název a jeho mince: Nejhorší den: středa (18 mincí).
Začněte programovat zdarma
9/11