2.4 Verzweigungen
Der Programmcode wurde bisher rein sequentiell abgearbeitet, d. h. eine Anweisung nach der anderen. Kontrollstrukturen ermöglichen eine Steuerung dieser Reihenfolge. Die Kontrollstrukturen unterteilen sich in Verzweigungen und Schleifen. Verzweigungen gestatten dem Programm, in verschiedene alternative Anweisungsblöcke zu verzweigen.
Es gibt die beiden Verzweigungsstrukturen If...Then...Else und Select Case.... Diese Auswahlmöglichkeiten übergeben u. a. aufgrund von Bedingungen, die Programmausführung an einen bestimmten Anweisungsblock. Bedingungen erstellen Sie mithilfe der bereits vorgestellten Vergleichsoperatoren.
Seltener genutzt werden außerdem noch die Auswahlfunktionen IIf() und Choose().
2.4.1 Einzeiliges If...Then...Else

Das einzeilige If...Then...Else hat folgenden Aufbau:
If Bedingung Then Anweisungen1 [ Else Anweisungen2 ]
Die Bedingung wird ausgewertet, sie ist entweder wahr oder falsch (True oder False). Ist das Ergebnis der Auswertung True, so wird der Then-Teil mit den Anweisungen1 ausgeführt. Ist das Ergebnis der Auswertung False und gibt es einen Else-Teil, so wird der Else-Teil mit den Anweisungen2 ausgeführt.
Dabei kann es sich sowohl um eine einzelne Anweisung als auch um mehrere Anweisungen handeln, die dann durch einen Doppelpunkt (:) voneinander getrennt sind. In jedem Fall muss der gesamte Block in einer Zeile untergebracht werden. If-Strukturen können auch ineinander verschachtelt werden.
Im nachfolgenden Programm im Projekt EinzeiligesIf wird das einzeilige If in vier verschiedenen Beispielen genutzt. Beachten Sie dabei, dass die einzelnen Anweisungen zu lang für den Druck in diesem Buch sind und daher auf mehrere Zeilen verteilt wurden, teilweise auch mithilfe des Zeichens _ (Unterstrich). Es handelt sich aber in jedem Fall um einzeilige If-Verzweigungen.
Public Class Form1
Private Sub cmdAnzeige_Click(...) Handles ...
Dim x As Integer
x = –1
If x < 0 Then lblAnz1.Text = "Negativ"
End Sub
Private Sub cmdAnzeige2_Click(...) Handles ...
Dim x As Integer
x = –1
If x > 0 Then lblAnz2.Text =
"Positiv" Else lblAnz2.Text =
"Negativ oder Null"
End Sub
Private Sub cmdAnzeige3_Click(...) Handles ...
Dim x As Integer
x = –1
If x > 0 Then lblAnz3.Text =
"Positiv" Else If x = 0 Then _
lblAnz3.Text =
"Null" Else lblAnz3.Text = "Negativ"
End Sub
Private Sub cmdAnzeige4_Click(...) Handles ...
Dim x As Integer
x = –1
If x > 0 Then x = x + 1 : lblAnz4.Text =
"Positiv " & x Else _
x = x – 1 : lblAnz4.Text =
"Negativ oder Null, x = " & x
End Sub
End Class
Listing 2.12 Projekt »EinzeiligesIf«
Zur Erläuterung:
- Die Integer-Variable x erhält jeweils den Wert –1. Für die Tests in den einzelnen Beispielen sollten Sie diesen Wert natürlich auch einmal ändern.
- Beim ersten Beispiel wird nur etwas angezeigt, falls die Variable x negativ ist.
- Beim zweiten Beispiel wird in jedem Falle etwas angezeigt.
- Beim dritten Beispiel wird für den Fall, dass die Variable x nicht positiv ist, eine weitere Verzweigung durchlaufen. Man nennt diese Verzweigung auch eine innere Verzweigung, im Gegensatz zu einer äußeren Verzweigung. Ist die Variable x = 0, so wird wegen der inneren Verzweigung Null angezeigt, anderenfalls wird Negativ angezeigt.
- Beim vierten Beispiel werden für beide möglichen Fälle jeweils zwei Anweisungen durchlaufen, die durch einen : (Doppelpunkt) voneinander getrennt sind.
2.4.2 If...Then...Else-Block

Bei einfachen Entscheidungen und einzelnen Anweisungen ist das einzeilige If geeignet. Sobald mehrere Anweisungen auszuführen sind, wird der Programmcode schnell unübersichtlich. Für diese Zwecke ist ein If...Then...Else -Block wesentlich besser geeignet. Der Block hat folgenden Aufbau:
If Bedingung1 Then
Anweisungen1
[ ElseIf Bedingung2
Anweisungen2 ] ...
[ Else
AnweisungenX ]
End If
Das Programm verzweigt zu den Anweisungen hinter der ersten zutreffenden Bedingung. Falls keine Bedingung zutrifft, werden die Anweisungen hinter dem Else ausgeführt, sofern es diesen Else-Zweig gibt. Anderenfalls wird keine Anweisung durchgeführt. Ein If...Then...Else-Block endet immer mit einem End If.
Im nachfolgenden Programm im Projekt BlockIf werden vier verschiedene Fälle geprüft. Trifft keiner dieser Fälle zu, so wird der Else-Zweig ausgeführt:
Public Class Form1
Private Sub cmdAnzeige_Click(...) Handles ...
Dim x, y As Integer
x = 0
y = 0
If x >= 0 And y >= 0 Then
lblAnzeige.Text =
"Beide größer oder gleich Null"
ElseIf x >= 0 And y < 0 Then
lblAnzeige.Text =
"Nur X größer oder gleich Null"
ElseIf x < 0 And y >= 0 Then
lblAnzeige.Text =
"Nur Y größer oder gleich Null"
ElseIf x >= 0 Then
lblAnzeige.Text =
"Wird nie angezeigt"
Else
lblAnzeige.Text =
"Beide kleiner Null"
End If
End Sub
End Class
Listing 2.13 Projekt »BlockIf«
2.4.3 Select Case

Eine Verzweigung kann in bestimmten Fällen auch mit Select Case ... gebildet werden. Diese Struktur vereinfacht eine Mehrfachauswahl, wenn nur ein Wert untersucht werden muss, und ist wie folgt aufgebaut:
Select Case Testausdruck
[ Case Ausdrucksliste1
Anweisungen1 ]
[ Case Ausdrucksliste2
Anweisungen2 ] ...
[ Case Else
AnweisungenX ]
End Select
Die Struktur Select Case ... verwendet nur einen Testausdruck, der am Beginn der Struktur ausgewertet wird. Sein Wert wird anschließend der Reihe nach mit den Werten der Ausdruckslisten verglichen. Eine Ausdrucksliste kann aus mehreren Ausdrücken oder einer Bereichsangabe mit dem Schlüsselwort To bestehen. Ein Ausdruck kann aus einem Wert oder einer Bedingung mit dem Schlüsselwort Is bestehen.
Bei der ersten Übereinstimmung wird der zugehörige Anweisungsblock ausgeführt und dann mit der nächsten Anweisung hinter dem End Select fortgefahren.
Der optionale Anweisungsblock hinter dem Case Else wird ausgeführt, falls vorher keine Übereinstimmung gefunden wurde.
Im nachfolgenden Programm im Projekt SelectCase werden ebenfalls vier verschiedene Fälle geprüft. Trifft keiner dieser Fälle zu, wird der Case Else-Zweig ausgeführt:
Public Class Form1
Private Sub cmdAnzeige_Click(...) Handles ...
Dim x As Integer
x = 16
Select Case x
Case 1, 3, 5, 7, 9
lblAnzeige.Text =
"Ungerade, Einstellig"
Case 2, 4, 6, 8
lblAnzeige.Text =
"Gerade, Einstellig"
Case Is < 1, Is > 20
lblAnzeige.Text =
"Kleiner 1 oder größer 20"
Case 11 To 15
lblAnzeige.Text =
"Größer gleich 11 und" &
" kleiner gleich 15"
Case Else
lblAnzeige.Text =
"Größer 15 und kleiner 21"
End Select
End Sub
End Class
Listing 2.14 Projekt »SelectCase«
In diesem Beispiel sind nur die Zahlen größer 15 und kleiner 21 in keiner Ausdrucksliste enthalten. Der entsprechende Text ist also im Case Else-Zweig zu finden.
2.4.4 Funktion IIf

Die Funktion IIf() ähnelt dem einzeiligen If...Then...Else, liefert allerdings im Unterschied zu diesem direkt einen Wert zurück. Ihre Syntax lautet:
IIf(Bedingung, True-Ausdruck, False-Ausdruck)
Sowohl True-Ausdruck als auch False-Ausdruck müssen angegeben werden. Im nachfolgenden Programm im Projekt FunktionIIf wird das Maximum der beiden Zahlen x und y ermittelt und ausgegeben:
Public Class Form1
Private Sub cmdAnzeige_Click(...) Handles ...
Dim x, y As Integer
x = 5
y = 3
lblAnzeige.Text = IIf(x > y, x, y)
End Sub
End Class
Listing 2.15 Projekt »FunktionIIf«
2.4.5 Funktion Choose

Die Funktion Choose() gibt den Wert aus einer Liste zurück, dessen Position dem Indexwert entspricht. Die Positionen in der Liste beginnen allerdings bei 1, nicht bei 0. Die Syntax lautet:
Choose(Index, Ausdruck1, [Ausdruck2] ...)
Im nachfolgenden Programm im Projekt FunktionChoose wird eine Währung aus einer Liste von Währungen ausgewählt und ausgegeben:
Public Class Form1
Private Sub cmdAnzeige_Click(...) Handles ...
Dim x As Integer
x = 2
lblAnzeige.Text =
Choose(x, "US Dollar", "Pfund", "Euro")
End Sub
End Class
Listing 2.16 Projekt »FunktionChoose«
Zur Erläuterung:
- Der Wert x = 2 führt zur Ausgabe von Pfund.
2.4.6 Übungen

Übung ÜSteuerbetrag
Schreiben Sie ein Programm, das zu einem eingegebenen Gehalt den Steuerbetrag berechnet und ausgibt, siehe Abbildung 2.23. In Tabelle 2.13 sind die Steuersätze angegeben.
Abbildung 2.23 Übung ÜSteuerbetrag
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 % |
Übung ÜKranVerzweigung
Erweitern Sie die Übung ÜKran. Die Bewegung des Krans soll kontrolliert werden. Kein Teil des Krans darf zu groß oder zu klein werden. Der Kran darf sich nicht über die sinnvollen Begrenzungen hinaus bewegen. Nutzen Sie Bedingungen und Verzweigungen, um dies zu verhindern.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.