Zum Inhalt springen

Gambas: Schleifen

Aus Wikibooks


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