Es gibt Fälle, in denen man einen Programmteil mehrmals hintereinander wiederholen will. Dafür gibt es weitere Kontrollstrukturen, sogenannte Schleifen.

For-Schleife

Bearbeiten

Die For-Schleife führt einen Block von Befehlen eine festgelegte Anzahl aus.

 ; Listing 12: For-Schleife
 
 EnableExplicit

 Define x.i

 OpenConsole()
 
 For x = 1 To 10
   PrintN(Str(x))
 Next x
 
 Delay(2000)

Ausgabe:

1
2
3
4
5
6
7
8
9
10

Die Ausgabe erzeugt die Zahlen 1 bis 10 untereinander geschrieben. Man übergibt For eine Variable, die direkt hinter For einen Wert zugewiesen bekommen muss. Dann schreibt man, bis zu welchem Wert die Variable hochgezählt werden soll. Es wird jeder Befehl bis Next x ausgeführt, dann wird zu x 1 hinzuaddiert und der Block an Befehlen wird erneut ausgeführt. Eine Ausführung des gesamten Blocks ist eine sogenannte Iteration. Sobald x größer als 10 ist, geht die Ausführung unter Next x weiter.

Es ist auch möglich, die Zahl, die mit jeder Iteration zu x hinzuaddiert wird, mithilfe des Schlüsselwortes Step zu modifizieren:

 ; Listing 13: Step

 EnableExplicit

 Define x.i

 OpenConsole()
 
 For x = 1 To 10 Step 2
   PrintN(Str(x))
 Next x
 
 Delay(2000)

Ausgabe:

1
3
5
7
9

Über das Step-Schlüsselwort wird festgelegt, dass in diesem Fall immer 2 anstatt 1 hinzuaddiert wird. Step kann auch negativ sein und erlaubt damit Rückwärtsdurchläufe.

 ; Listing 14: Negativer Step
 
 EnableExplicit

 Define x.i

 OpenConsole()
 
 For x = 10 To 1 Step -1
   PrintN(Str(x))
 Next x
 
 Delay(2000)

Ausgabe:

10
9
8
7
6
5
4
3
2
1

While und Repeat

Bearbeiten

Neben der For-Schleife gibt es außerdem die While- und die Repeat-Schleife.

 ; Listing 15: While
 
 EnableExplicit

 Define x.i

 OpenConsole()
 
 While x <= 10
   PrintN(Str(x))
   x + 1
 Wend
 
 Delay(2000)

Ausgabe:

0
1
2
3
4
5
6
7
8
9
10

Der While-Schleife (kopfgesteuerte Schleife) muss ein Vergleichsausdruck übergeben werden und die Schleife wird solange ausgeführt, wie dieser zutrifft. Es gibt auch Fälle, in denen die Schleife, im Gegensatz zur For-Schleife, gar nicht ausgeführt wird, nämlich wenn x schon vor der Ausführung der Schleife größer als 10 wäre. Außerdem sieht man an diesem Beispiel, dass eine Variable ohne Initialisierung den Wert 0 hat. In vielen anderen Programmiersprachen wäre dies schlechter Stil oder sogar ein Fehler, in PureBasic ist dies gewollt.

 ; Listing 16: Repeat
 
 EnableExplicit

 Define x.i

 OpenConsole()
 
 Repeat
   PrintN(Str(x))
   x+1
 Until x >= 10
 
 Delay(2000)

Ausgabe:

0
1
2
3
4
5
6
7
8
9

Die Repeat-Schleife unterscheidet sich insofern von der While-Schleife, als dass die Schleife immer mindestens einmal ausgeführt wird und außerdem solange ausgeführt wird, bis ein bestimmer Fall eintritt und nicht solange einer zutrifft.

Es ist möglich, jede Schleife als eine While-Schleife zu schreiben.

Break und Continue

Bearbeiten

Bisher haben die Schleifen einfach strikt den Befehlsblock abgearbeitet. Es ist aber möglich, diese Ausführung dynamischer zu gestalten.

 ; Listing 17: Break und Continue
 
 EnableExplicit

 Define x.i

 OpenConsole()
 
 For x = 1 To 10
   If x = 5
     Continue
   ElseIf x = 8
     Break
   EndIf
   
   PrintN(Str(x))
 Next x
 
 Delay(2000)

Ausgabe:

1
2
3
4
6
7

Man sieht, dass nur die Zahlen von 1 bis 7 ausgegeben werden, ohne die 5 und auch ohne die Zahlen 8 bis 10, obwohl man es von der For-Anweisung erwarten würde. Dies liegt an den Schlüsselwörtern Continue und Break. Continue springt sofort zur nächsten Iteration, ohne dass der restliche Befehlsblock ausgeführt wird. Break bricht die gesamte Schleife sofort ab, ohne dass die nachfolgenden Iterationen noch beachtet werden.

Aufgaben

Bearbeiten
  1. Es soll ein Programm geschrieben werden, dass nach einem String und einer ganzen positiven Zahl n fragt und den String n-mal ausgibt.
  2. Es soll ein Programm geschrieben werden, das den Benutzer immer wieder zu einer Eingabe auffordert und den String ausgibt, bis er einfach nur Enter drückt.