Lua Logo
Schleifen

Das Wort Schleife sagt uns ja schon viel. Es wird alles was dort drin steht mehrfach ausgeführt

for - Schleife (numerische Form)


Die for - Schleife hat zwei Formen. Die erste besprechen wir jetzt und die zweite, wenn wir mehr über Tables wissen.

Was steht oben?

for variable = anfang, ende, sprungWeite do
Block
end

Wir haben:
  • eine Variable
  • einen Anfang
  • ein Ende
  • und eine Sprung-Weite


Die for - Schleife zählt vom Anfang ausgehend bis zum Ende jeweils die Sprungweite zur Variablen dazu. Führt dann den Block aus und prüft am end angekommen ob die Variable gleich dem Ende ist. Ist das nicht der Fall geht das ganze von vorne los. Das soll jemand verstehen!


Machen wir ein Beispiel:

anfang = 5; ende = 11; sprungWeite= 0.5; -- man beachte: Das Dezimalzeichen ist ein Punkt

Als Block lassen wir uns die Variable ausdrucken.

for i = 5, 11, 0.5 do
print(i)
end


Machen wir noch mal ein Bildchen

Schleifen


Als erstes wird 5 ausgedruckt. Aha, er zählt also die Sprungweite beim ersten Mal nicht dazu.
Dann zählt er jeweils zu unserer Variablen, die i heißt, 0.5 dazu. Ist die Schleife bei 11 angekommen, hört sie auf.
Um das zu kontrollieren habe ich nach der Schleife noch die Anweisung gegeben "Ende" zu drucken. Ich glaub ja auch nicht alles.


Das ganze geht natürlich auch rückwärts. Wir wollen also von 11 nach 5 zählen. Was machen wir dann mit der Sprungweite? Wenn wir zu 11 0.5 dazu zählen haben wir 11.5. Das klappt also nicht. Wir müssen 0.5 abziehen. Wie machen wir das?

wir nehmen das "-"

Dient zur Negation von Werten
Aus plus wird minus und umgekehrt.

c = - a

wenn a == 2, dann c == -2

Wir benutzten unseren oben erwähntes (noch mal -)
Damit drehen wir das Vorzeichen der Sprungweite um und zählen dann jeweils -0.5 zu 11 zu.
Warum erklärt dieser I... das so kompliziert? Das hat schon seine Gründe. Jetzt ein wenig umständlich, dafür später leichter.

for i = 11, 5, -0.5 do
print(i)
end

Nun: die Durchgänge

  • 11 plus -0.5 = 10.5 --> Ausdruck --> 10.5
  • 10.5 plus -0.5 = 10 --> Ausdruck --> 10
  • ...
  • ...
  • ...
  • 5.5 plus -0.5 = 5 --> Ausdruck --> 5
  • Ende

Diesmal ohne Bildchen. Selbst probieren.


Was wir noch nicht wussten: Unsere Variable, die wir hier i genannt haben, ist in diesem Block eine locale Variable. Das heißt außerhalb existiert sie nicht mehr.
Probieren wir mal anstatt print ("Ende") das print (i) zu machen. Da sind wir ja außerhalb des Blocks.

Das war\'s.


while - Schleife

while heißt während oder so lange

while Bedingung do
Block
end

Während die Bedingung erfüllt ist mache den Block. Im Umkehrschluss heißt das: ist die Bedingung nicht mehr erfüllt, dann höre auf.

Der Reihe nach:
  • 1. es wird geprüft, ob die Bedingung erfüllt ist
  • 2. ist sie erfüllt, dann wird der Block ausgeführt
  • 2.1 dann wird am end wieder geprüft, ob die Bedingung erfüllt ist
  • 2.2 ist sie noch immer erfüllt, wird der Block noch mal ausgeführt (zurück zu 2.)
  • 2.3 ist sie nicht mehr erfüllt, dann ist Ende

Als Beispiel bauen wir unsere for - Schleife jetzt mal in eine while -Schleife um.

while i <= 11 do
print (i)
end

Kommt das Programm jetzt an der Schleife an sag er sofort: "Das es i gibt nicht"
Machen wir ihm noch eine Variable

i = 5 -- das ist ja unser Anfang

bevor wir noch eine Pleite erleben, Zählen wir sie auch direkt rauf.

i = i + 0.5


Nur wo packen wir das hin, damit das das gleiche macht wie bei der for - Schleife?
Es muss hinter unseren print - Befehl, da er ja bei for zuerst 5 ausdruckt.

Daher:

i = 5
while i <= 11 do
print (i)
i = i + 0.5
end

Wir probieren im Editor und siehe da, es klappt.

Was passiert jetzt genau?

  • Vor der Schleife angekommen wird die Variable i auf den Wert 5 gesetzt
  • Angekommen an der Schleife wird geprüft ob 5 kleiner oder gleich 11 ist. Es ist!
  • Da es ist, wird gedruckt --> 5
  • Dann ??? ein Paradoxon? Nein, ist keins. Dazu sollten wir wissen was bei einer Operation passiert.
    Diese Operation ist eine Addition. Der Computer lädt sich zuerst den Wert von i (beim ersten mal 5)
    in irgendeinen Speicherplatz, dann addiert er zu dieser Kopie den Wert 0.5 dazu.
    Das Ergebnis speichert er dann auf den originalen Speicherplatz der Variablen i ab.
    Ab diesem Zeitpunkt hat die Variable i den Wert 5.5
  • Am end angekommen wird geprüft ob 5.5 kleiner oder gleich 11 ist. Es ist!
Irgendwann ist i nicht mehr kleiner oder gleich 11. Dann ist Ende

Als Übung die andere Schleife machen. Die mit dem Herunterzählen.


Uff noch eine. Was uns dort wohl erwartet? Nicht viel.

repeat - Schleife
repeat heißt wiederhole
until heißt bis

repeat
Block
until Bedingung

Im Grunde genommen ist eine repeat - Schleife das gleich wie eine while - Schleife.
Nur mit einem kleinen aber feinen Unterschied. Man könnte es eigentlich sehen.
Die Bedingung steht unten. Das heißt zum einen, die Schleife wird im Gegensatz zur while - Schleife mindestens einmal durchlaufen. Zum anderen muss die Bedingung auch etwas anders aussehen um das gleiche zu erreichen.

Das erste nehme ich vorweg, das zweite ist eine Übung.

i = 5
repeat
print (i)
i = i + 0.5
until i > 11

Hier wird also die Schleife durchgeführt bis eine Bedingung erfüllt ist. (hier wenn i größer als 11 ist)
Bei der while - Schleife. Wird die Schleife durchlaufen solange eine Bedingung erfüllt ist.
Die Vervielfältigung der auf diesen Seiten enthaltenen Informationen und Grafiken ist untersagt, ausgenommen davon ist sämtlicher auf diesen Seiten angezeigter Quellcode.
Siehe auch: Haftungsausschluss
Copyright © Robert Schmitz 2006