Der größte Wert
Das nächste Muster findet den größten Wert. Stell dir Emma auf dem Dorffest vor, auf der Suche nach dem schwersten Kürbis. Sie hebt den ersten hoch. Dann geht sie von Kürbis zu Kürbis, und immer wenn einer schwerer ist als der bisher schwerste, merkt sie sich stattdessen diesen. Am Ende kennt sie den schwersten Kürbis. Im Code ist „der bisher schwerste“ eine Variable:
local kuerbisse = {8, 12, 7, 15, 10}
local schwerster = kuerbisse[1]
for i = 2, #kuerbisse do
if kuerbisse[i] > schwerster then
schwerster = kuerbisse[i]
end
end
print("Schwerster: " .. schwerster .. " kg")Das gibt Folgendes aus:
Schwerster: 15 kgschwerster beginnt mit dem ersten Element, die Schleife kann also bei Index 2 beginnen: Du musst den ersten Kürbis nicht mit sich selbst vergleichen (bei 1 zu beginnen würde auch funktionieren). 12 ist mehr als 8, also wird schwerster zu 12. 7 ist nicht mehr als 12, aber 15 ist es, und 10 ist nicht mehr als 15, also bleibt 15 bis zum Ende.
Warum beginnst du nicht mit 0? Weil 0 vielleicht keiner der Werte ist. Wären alle Werte negativ, wie die Wintertemperaturen {-5, -2, -8}, bliebe die 0 vom Anfang die größte, und das Programm würde eine Temperatur ausgeben, die gar nicht in der Liste steht. Das erste Element ist immer ein sicherer Start.
Den kleinsten Wert findest du genauso, nur mit < statt >.
Vielleicht erinnerst du dich an math.max, das die größte von mehreren Zahlen liefert: math.max(8, 12, 7) ist 12. Es will aber die Zahlen selbst und keine Liste. math.max(kuerbisse) schaut nicht in die Liste: Bei einem einzigen Wert gibt es einfach diesen Wert zurück, und print(math.max(kuerbisse)) gibt table: 0x… aus. Für eine Liste brauchst du die Schleife.
Oft musst du auch wissen, wo der größte Wert steht. Dann merke dir seinen Index in einer zweiten Variablen und ändere beide zusammen. Hier gibt dir ipairs den Index und das Element auf einmal:
local kuerbisse = {8, 12, 7, 15, 10}
local schwerster = kuerbisse[1]
local index_schwerster = 1
for i, gewicht in ipairs(kuerbisse) do
if gewicht > schwerster then
schwerster = gewicht
index_schwerster = i
end
end
print("Kürbis " .. index_schwerster .. " wiegt " .. schwerster .. " kg")Das gibt Folgendes aus:
Kürbis 4 wiegt 15 kgWeil Lua ab 1 zählt, ist der Index direkt die Nummer des Kürbisses, so gezählt, wie Menschen zählen: Der vierte Kürbis hat den Index 4. Mit dem Index kannst du auch in eine andere Liste schauen, deren Elemente zu denselben Positionen gehören, zum Beispiel die Namen der Bauern, die die Kürbisse angebaut haben: bauern[index_schwerster].
Wenn zwei Kürbisse gleich viel wiegen, behält > den ersten von ihnen, denn ein Kürbis, der nur gleich schwer ist, ersetzt ihn nicht. Mit >= bekämst du den letzten.
So schreibst du es:
Anweisungen
- 1
Finde heraus, wie viele Münzen Emma an einem Tag am meisten verdient hat. Erzeuge eine lokale Variable
bestemit dem ersten Element vonmuenzen, gehe die Liste durch und speichere ein Element inbeste, sobald es größer alsbesteist. Gib nach der SchleifeMeiste Münzen: 52aus. - 2
Finde heraus, welcher Tag das war. Erzeuge neben
besteeine lokale Variableindex_bestemit dem Wert 1 und speichere in der Schleife den Index darin, sobald dubesteänderst. Hole damit nach der Schleife den Namen des Tages austageund gibBester Tag: Dienstagaus. - 3
Finde in einer zweiten Schleife auf dieselbe Weise den schlechtesten Tag: den mit den wenigsten Münzen. Gib seinen Namen und seine Münzen aus:
Schlechtester Tag: Mittwoch (18 Münzen).