2.6 Schleifen 

Schleifen werden in Programmen häufig benötigt. Sie ermöglichen den mehrfachen Durchlauf von Anweisungen. Darin liegt eine besondere Stärke der Programmierung allgemein: die schnelle wiederholte Bearbeitung ähnlicher Vorgänge.
Es gibt die Schleifenstrukturen: Do...Loop, For...Next, For Each... In... und With.
Mithilfe der ersten beiden Strukturen steuert man die Wiederholungen eines Anweisungsblocks (die Anzahl der Schleifendurchläufe). Dabei wird der Wahrheitswert eines Ausdrucks (der Schleifenbedingung) oder der Wert eines numerischen Ausdrucks (Wert des Schleifenzählers) benötigt.
Die Schleife For Each...In... wird meist bei Feldern oder Collections (Auflistungen) eingesetzt. Die Anweisung With dient zur Steuerung einer besonderen Schleife mit nur einem Durchlauf.
2.6.1 For ... Next 

Falls die Anzahl der Schleifendurchläufe bekannt oder vor Beginn der Schleife berechenbar ist, sollte man die For... Next-Schleife verwenden. Ihr Aufbau sieht wie folgt aus:
For Zähler = Anfang To Ende [ Step = Schritt ] [ Anweisungen ] [ Exit For ] [ Anweisungen ] Next [ Zähler ]
Step
Die Zahlen-Variable Zähler wird zunächst auf den Wert von Anfang gesetzt. Nach jedem Durchlauf wird sie um den Wert von Schritt verändert, also vergrößert oder verkleinert. Falls Step = Schritt nicht angegeben wurde, wird die Variable um 1 vergrößert. Der neue Wert von Zähler wird mit dem Wert von Ende verglichen.
- Falls die Schrittweite positiv ist und der Wert von Zähler nicht größer als der Wert von Ende ist, wird die Schleife wiederum durchlaufen.
- Falls die Schrittweite negativ ist und der Wert von Zähler nicht kleiner als der Wert von Ende ist, wird die Schleife ebenfalls wiederum durchlaufen.
- Falls die Schrittweite positiv ist und der Wert von Zähler größer als der Wert von Ende ist oder falls die Schrittweite negativ ist und der Wert von Zähler kleiner als der Wert von Ende ist, wird die Schleife beendet.
Exit For
Die Anweisung Exit For kann eingesetzt werden, um die Schleife aufgrund einer speziellen Bedingung sofort zu verlassen.
In dem folgenden Programm (p0229) werden durch Aufruf von vier Buttons vier unterschiedliche Schleifen durchlaufen:
Public Class frm0229
[ ... ]
Private Sub cmdSchleife1_Click( ... ) Handles ...
Dim i As Integer
lblAnzeige.Text = ""
For i = 3 To 7
lblAnzeige.Text &= i & vbCrLf
Next
End Sub
[ ... ]
End ClassZur Erläuterung:
- Als Zählervariable dient i.
- Die Schleife wird erstmalig mit i = 3 und letztmalig mit i = 7 durchlaufen.
- Es ist keine Schrittweite angegeben, also wird als Schrittweite 1 genommen.
- Statt Next hätte man zur größeren Deutlichkeit auch Next i schreiben können.
Das Ergebnis zeigt Abbildung 2.30.
Public Class frm0229
[ ... ]
Private Sub cmdSchleife2_Click( ... ) Handles ...
Dim i As Integer
lblAnzeige.Text = ""
For i = 3 To 11 Step 2
lblAnzeige.Text &= i & vbCrLf
Next
End Sub
[ ... ]
End ClassAbbildung 2.30 Erste Schleife
Das Ergebnis zeigt die Abbildung 2.31:
Abbildung 2.31 Zweite Schleife
Public Class frm0229
[ ... ]
Private Sub cmdSchleife3_Click( ... ) Handles ...
Dim i As Integer
lblAnzeige.Text = ""
For i = 7 To 3 Step -1
lblAnzeige.Text &= i & vbCrLf
Next
End Sub
[ ... ]
End ClassDas Ergebnis zeigt Abbildung 2.32.
Public Class frm0229
[ ... ]
Private Sub cmdSchleife4_Click( ... ) Handles ...
Dim d As Double
lblAnzeige.Text = ""
For d = 3.5 To 7.5 Step 1.5
lblAnzeige.Text &= d & vbCrLf
Next
End Sub
[ ... ]
End ClassAbbildung 2.32 Dritte Schleife
Das Ergebnis sehen Sie in Abbildung 2.33:
Abbildung 2.33 Vierte Schleife
2.6.2 Do ... Loop 

Steuerung über Bedingung
Ist die Anzahl der Schleifendurchläufe nicht bekannt bzw. vor Beginn der Schleife nicht berechenbar, so sollte man die Do ... Loop-Schleife verwenden. Es gibt sie in fünf verschiedenen Varianten:
- Do While...Loop: Prüft die Bedingung zum Weiterlaufen der Schleife am Anfang der Schleife.
While
- Do...Loop While: Prüft die Bedingung zum Weiterlaufen der Schleife am Ende der Schleife.
- Do Until...Loop: Prüft die Bedingung zum Abbruch der Schleife am Anfang der Schleife.
Until
- Do...Loop Until: Prüft die Bedingung zum Abbruch der Schleife am Ende der Schleife.
- Do...Loop: Die Bedingung zum Weiterlaufen oder Abbruch der Schleife wird nicht geprüft, daher ist eine Verzweigung in der Schleife und ein Exit Do zur Beendigung der Schleife notwendig.
Der allgemeine Aufbau sieht wie folgt aus:
Do { While | Until } Bedingung
[ Anweisungen ]
[ Exit Do ]
[ Anweisungen ]
Loopoder
Do
[ Anweisungen ]
[ Exit Do ]
[ Anweisungen ]
Loop { While | Until } BedingungZufallsgenerator
Im folgenden Programm (p0230) werden alle fünf Möglichkeiten genutzt. Es sollen jeweils so lange Zahlen addiert werden, bis die Summe der Zahlen 5 erreicht. Da die Zahlen durch einen Zufallsgenerator erzeugt werden, ist die Anzahl der Schleifendurchläufe nicht vorhersagbar.
Abbildung 2.34 Do…Loop-Schleife
Randomize, Rnd
Der Zufallszahlengenerator wird mithilfe der Funktion Rnd() realisiert. Diese liefert quasizufällige Zahlen zwischen 0 und 1. Der Zufallszahlengenerator muss mithilfe der Prozedur Randomize() vor der Benutzung initialisiert werden, da andernfalls immer die gleichen »Zufallszahlen« geliefert würden. Die Initialisierung wird pro Programmaufruf einmalig beim Laden des Formulars vorgenommen.
Load, MyBase
Dieser Zeitpunkt wird durch das Ereignis Load gekennzeichnet. Man erstellt den Rahmen dieser Ereignisprozedur, indem man einen Doppelklick auf einer freien Stelle des Formulars ausführt. Die zugehörige Ereignisprozedur behandelt das Ereignis MyBase.Load. Mit MyBase kann man auf die Klasse zugreifen, in der man sich befindet; in diesem Fall ist das die Klasse des Formulars frm0230.
Public Class frm0230
Private Sub frm0230_Load( ... ) Handles MyBase.Load
Randomize()
End Sub
Private Sub cmdSchleife1_Click( ... ) Handles ...
Dim Summe As Single
lblAnzeige.Text = ""
Summe = 0
Do While Summe < 5
Summe += Rnd()
lblAnzeige.Text &= Summe & vbCrLf
Loop
lblAnzeige.Text &= "Fertig!"
End Sub
Private Sub cmdSchleife2_Click( ... ) Handles ...
Dim Summe As Single
lblAnzeige.Text = ""
Summe = 0
Do
Summe += Rnd()
lblAnzeige.Text &= Summe & vbCrLf
Loop While Summe < 5
lblAnzeige.Text &= "Fertig!"
End Sub
Private Sub cmdSchleife3_Click( ... ) Handles ...
Dim Summe As Single
lblAnzeige.Text = ""
Summe = 0
Do Until Summe >= 5
Summe += Rnd()
lblAnzeige.Text &= Summe & vbCrLf
Loop
lblAnzeige.Text &= "Fertig!"
End Sub
Private Sub cmdSchleife4_Click( ... ) Handles ...
Dim Summe As Single
lblAnzeige.Text = ""
Summe = 0
Do
Summe += Rnd()
lblAnzeige.Text &= Summe & vbCrLf
Loop Until Summe >= 5
lblAnzeige.Text &= "Fertig!"
End Sub
Private Sub cmdSchleife5_Click( ... ) Handles ...
Dim Summe As Single
lblAnzeige.Text = ""
Summe = 0
Do
Summe += Rnd()
lblAnzeige.Text &= Summe & vbCrLf
If Summe >= 5 Then Exit Do
Loop
lblAnzeige.Text &= "Fertig!"
End Sub
End ClassZur Erläuterung:
Im Folgenden wird nur die erste Ereignisprozedur cmdSchleife1_ Click() erläutert. Die anderen sind vergleichbar aufgebaut, und auf die unterschiedliche Schleifensteuerung wurde bereits weiter oben eingegangen.
- Der Inhalt des Labels wird von alten Ausgaben gelöscht.
- Die Variable Summe wird zunächst mit dem Wert 0 initialisiert. Dies ist in Visual Basic eigentlich nicht nötig, gehört aber zum guten Programmierstil, da man auf diese Weise den Wert der Variablen zu Beginn der Schleife sicherstellen kann.
Summe berechnen
- Zu Beginn der Schleife wird geprüft, ob die Summe der Zahlen kleiner als 5 ist. Trifft dies zu, kann die Schleife durchlaufen werden.
-
- Hinweis: Bei einer solchen kopfgesteuerten Schleife (es wird im Kopf der Schleife geprüft) kann es vorkommen, dass sie niemals durchlaufen wird.
- Der Wert der Variablen Summe wird um eine Zufallszahl zwischen 0 und 1 erhöht.
- Der Inhalt des Labels wird um den aktuellen Wert der Summe und einen Zeilenumbruch verlängert.
- Man kommt zum Ende der Schleife, zur Anweisung Loop. Sie führt dazu, dass das Programm wieder zu Beginn der Schleife fortsetzt. Es wird wiederum geprüft, ob die Summe der Zahlen kleiner als 5 ist. Sobald dies nicht mehr zutrifft, läuft das Programm hinter der Anweisung Loop weiter.
- Es wird die Ausgabe »Fertig!« erzeugt.
2.6.3 With 

Mithilfe von With führt man eine Reihe von Anweisungen für ein einzelnes Objekt durch. Dabei wird der einmal erstellte Bezug zum Objekt mehrfach verwendet. Bei einem längeren Objektnamen ist dies sehr nützlich und übersichtlich. Der Aufbau sieht wie folgt aus:
With Objekt [ Anweisungen ] End With
Ein Beispiel (p0231):
Public Class frm0231
Private Sub cmdAnzeige_Click( ... ) Handles ...
With lblAnzeige
.BorderStyle = BorderStyle.Fixed3D
.BackColor = Color.Yellow
.Text = "Test"
.Location = New Point(50, 100)
End With
End Sub
End ClassZur Erläuterung:
- Die Eigenschaften des Labels lblAnzeige werden mithilfe von With geändert.
- Die Eigenschaften Rahmenstil, Hintergrundfarbe, Textinhalt und Position werden nacheinander gesetzt. Dabei muss zu Beginn der Anweisung jeweils nur ein Punkt angegeben werden. Da das Programm sich innerhalb des With-Blocks befindet, ist es klar, auf welches Objekt sich die Änderungen beziehen.
2.6.4 Übungen 

Anhand einer Reihe von Übungsaufgaben zu Schleifen (und Verzweigungen) werden im Folgenden einige typische Probleme der Programmierung in Visual Basic trainiert. Der visuelle Teil der Lösung enthält in der Regel nur ein einfaches Textfeld zur Eingabe, einen oder zwei Buttons zum Durchführen der Aufgabe und ein einfaches Label zur Ausgabe.
Übung p0232:
For-Schleife: Schreiben Sie ein Programm mit einer einfachen Schleife, das nacheinander die folgenden Zahlen ausgibt: 35, 32.5, 30, 27.5, 25, 22.5, 20.
Übung p0233:
For-Schleife: Erweitern Sie die vorherige Aufgabe. Am Ende der Zeile sollen Summe und Mittelwert aller Zahlen angezeigt werden.
Abbildung 2.35 Übung p0232 bzw. p0233
Übung p0234:
Do…Loop-Schleife: Schreiben Sie ein Programm, mit dessen Hilfe eine eingegebene Zahl wiederholt halbiert und ausgegeben wird. Das Programm soll beendet werden, wenn das Ergebnis der Halbierung kleiner als 0,001 ist.
Abbildung 2.36 Übung p0234
Übung p0235:
If… Else-Schleife: Schreiben Sie ein Programm, mit dem das Spiel »Zahlenraten« gespielt werden kann: Per Zufallsgenerator wird eine Zahl zwischen 1 und 100 erzeugt, aber nicht angezeigt. Der Benutzer soll so lange Zahlen eingeben, bis er die Zahl erraten hat. Als Hilfestellung soll jedes Mal ausgegeben werden, ob die eingegebene Zahl größer oder kleiner als die zu ratende Zahl ist.
Abbildung 2.37 Übung p0235
Übung p0236:
For-Schleife, If…Else oder Select Case: Erweitern Sie das Programm aus Übung p0222. Schreiben Sie ein Programm, das zu einer Reihe von Gehältern u. a. den Steuerbetrag berechnet und ausgibt. In der folgenden Tabelle sind die Steuersätze angegeben.
| Gehalt | Steuersatz |
|
bis einschl. 12.000 € |
12 % |
|
von 12.000 bis einschl. 20.000 € |
15 % |
|
von 20.000 bis einschl. 30.000 € |
20 % |
|
über 30.000 € |
25 % |
Es sollen für jedes Gehalt von 5.000 € bis 35.000 € in Schritten von 3.000 € folgende vier Werte ausgegeben werden: Gehalt, Steuersatz, Steuerbetrag, Gehalt abzüglich Steuerbetrag. Jedes Gehalt soll mit den zugehörigen Werten in einer eigenen Zeile ausgegeben werden.
Abbildung 2.38 Übung p0236



Jetzt online bestellen














