Gambas: Schleifen
zurück zu Gambas
Schleifen
[Bearbeiten]Schleifen erlauben es, einen bestimmten Programmteil mehrfach zu wiederholen. Wenn man nicht weiß , wie oft man die Anweisung in der Schleife wiederholen muß, dann sind Do-Schleifen eine gute Wahl. Wenn man genau weiß, wie oft die Schleife wiederholt werden soll, dann sollte man den For...Next-Befehl wählen. Die For-Next Schleife verwendet eine Zähler (counter), dessen Wert während jeder Wiederholung der Schleife erhöht oder verringert wird.
For next Schleife
[Bearbeiten]Schleifen erlauben es, einen bestimmten Programmteil mehrfach mit einer sich verändernden Zahl durchlaufen zu lassen . Deswegen wird die FOR...NEXT Schleife auch als Zählerschleife bezeichnet.
Das Prinzip der Schleife schaut so aus:
FOR i = 1 to 9 STEP 1 Print i 'Programmcode NEXT
Die Variable i besitzt am Anfang den Wert 1. Jedesmal wenn das Programm das Ende der Schleife bei dem Befehl NEXT erreicht, springt das Programm an den Anfang der Schleife bei FOR zurück. Für jeden neuen Schleifendurchgang wird i um 1 (STEP 1) erhöht. Erreicht i den Endwert der Schleife , den to Wert (im Beispiel 9) so bricht die Schleife ab, der Programmablauf wird nach der Schleife fortgesetzt.
Das folgende Programm zeigt den Gebrauch einer For-Next Schleife. Sie brauchen dazu nur eine leere Form. Klicken Sie auf die Form im Entwurfsmodus und geben Sie den Programmcode weiter unten ein. Dann starten Sie das Programm mit F5 . Jedesmal wenn sie mit der Maus auf die Form kommen , wird Hallo Welt 10 mal ausgegeben.
PUBLIC SUB Form_Enter() DIM i AS Integer FOR i = 1 TO 10 PRINT "Hallo Welt" NEXT END
Probieren Sie eine Variante die noch einfacher ist:
PUBLIC SUB Form_Enter() DIM i AS Integer FOR i = 1 TO 10 PRINT i NEXT END
Probieren Sie noch folgende Variante:
PUBLIC SUB Form_Enter() DIM i AS Integer FOR i = 1 TO 10 PRINT i,i*i,i*i*i NEXT END
Sie können die 3 Beispiele auch mit dem Befehl
PUBLIC SUB Form_Open()
automatisch starten.
Um Schleifen lesbarer zu machen, rückt man den inneren Befehlsteil der Schleife ein. Er wird mehrfach durchlaufen. Im Gegensatz zu VB verzichtet Gambas auf die Nennung des Zählers am Ende der Schleife nach dem Next Befehl.
For I = 1 to 10 print I ' Next I in VB möglich ' In Gambas als überflüssig herausgeworfen. Next
Wenn Sie auf die Grafik verzichten und den Terminalmdous nutzen, dann lautet das letzte Programm folgendermaßen:
STATIC PUBLIC SUB Main() DIM i AS Integer FOR i = 1 TO 10 PRINT i,i*i,i*i*i,i^4,i^5 NEXT END
Das Ergebnis schaut so aus:
1 1 1 1 1 2 4 8 16 32 3 9 27 81 243 4 16 64 256 1024 5 25 125 625 3125 6 36 216 1296 7776 7 49 343 2401 16807 8 64 512 4096 32768 9 81 729 6561 59049 10 100 1000 10000 100000
Eine Schleife mit dem Step Befehl zeigt folgendes Beispiel: Erstaunlicherweise funktioniert hier das Komma in der Printausgabe nicht richtig . Probieren Sie einmal das Semikolon stattdessen aus.
PUBLIC SUB Form_Open() x AS Integer FOR x = 0 TO 100 STEP 5 PRINT x, NEXT END
Das Ergebnis sollte lauten:
0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100
Das tut es aber nicht ! Noch ein paar komische Beispiele:
PUBLIC SUB Form_Open() DIM i AS Integer FOR i = 1 TO 100 STEP i PRINT i NEXT END
PUBLIC SUB Form_Open() DIM i AS Integer DIM x AS Integer FOR x = 1 TO 10 FOR i = 1 TO 100 STEP x PRINT i & " "; NEXT NEXT END
Do Schleifen
[Bearbeiten]Eine DO LOOP Schleife ist im Prinzip eine Endlosschleife und muß durch irgendeine Bedingung in der Schleife unterbrochen werden.
Beispiel1: Endlosschleife
PUBLIC SUB Form_Open() x AS Integer x = 1 DO THEN PRINT "x = " & x x = x + 1 LOOP END
Beispiel 2: Endlosschleife , scheinbar zu Ende.
PUBLIC SUB Form_Open() a AS Integer x AS Integer Randomize() x = 1 DO a = Int(Rnd(1,100)) IF x < a THEN PRINT "x = " & x & " a = " & a x = x + 1 LOOP END
Warum werden nicht alle Zahlen von 1 bis 99 im Direktfenster ausgegeben ? Wann und warum hört die Schleife eigentlich auf ?
-> Die Schleife hört nicht auf. Es fehlt die Abbruchbedingung.
For Each Schleife
[Bearbeiten]Kommt bei Arrays zur Anwendung Siehe Gambas: Arrays
Schleife und Verzweigung kombiniert
[Bearbeiten]Der Programmcode schaut so aus. Sie brauchen nur einen Befehlsknopf und starten mit F5.
PUBLIC SUB Button1_Click() DIM k AS Integer FOR k = 1 TO 10000 IF k = 5000 THEN PRINT "Die Zahl 5000 wurde erreicht !" NEXT END
Sortierungen
[Bearbeiten]Siehe Gambas: Sortieren