Verzweigungen

Es gibt diverse Gründe, warum ein Programm in Abhängigkeit von Variablen bestimmte Operationen nicht ausführen soll. Hier sind ein paar typische Beispiele zusammengestellt:

Das Programm soll in all diesen Fällen in Abhängigkeit von einem Variableninhalt seinen Ablauf ändern. Dazu brauchen wir einen Befehl, der unter einer Bedingung eine Anweisung oder einen Anweisungsblock ausführt. Um die Bedingung zu formulieren brauchen wir Operatoren, mit denen wir Werte vergleichen können.

Verzweigung - IF (Wenn-Dann)

Die if-Anweisung wird auch „Zweifachauswahl“ genannt. Der Wert eines logischen Ausdrucks (wahr oder falsch) wird berechnet, und auf Grund des Ergebnisses wird eine von zwei Anweisungen durchgeführt.

Zur grafischen Darstellung der Zweifachauswahl in Struktogrammen ist unter anderem folgende Form üblich:

Mit dem Befehl »if« ist es möglich, eine Befehlssequenz unter einer Bedingung auszuführen. Das Schlüsselwort if kommt aus dem Englischen und bedeutet »falls« oder »wenn«. Der Syntax einer einfach if-Verzweigung sieht folgendermaßen aus:

if( «Bedingung» ){
    «Anweisungen»;
}

Dem Schlüsselwort if folgt eine Klammer, in der die Bedingung formuliert wird, unter der der nachfolgende Anweisungsblock ausgeführt wird. Ein Anweisungsblock ist entweder eine einzelne Anweisung oder mehrere Anweisungen, die durch geschweifte Klammern zusammengefasst werden.

int Gemeindeeinwohner=12000;
 
if (Gemeindeeinwohner > 10000)
{
    cout << "Diese Gemeinde ist eine Gemeinde mit Stadtrecht!" << endl;
}

Einrücken

Es hat sich bewährt, Anweisungen, die unter Bedingungen oder in Schleifen ausgeführt werden, einzurücken. Einige Programmeditoren führen dies automatisch durch. Für das Einrücken können die Tabulatortaste oder Leerzeichen verwendet werden.

if (Divisor != 0)
{
    Ergebnis = Dividend / Divisor;
}

Die Division wird nur durchgeführt, wenn die Bedingung zutrifft, also der Divisor ungleich 0 ist.

Beispiel Glatteis

Bei Temperaturwerten kleiner oder gleich 0 Grad Celsius soll der Text „Achtung, Glatteisgefahr!“ ausgegeben werden.

In diesem Fall gibt es keinen Nein-Zweig. Bei Plus-Graden erfolgt keine Ausgabe.

Der C++-Code dazu sieht folgendermaßen aus:

if (cgrad<=0)
  cout << "Achtung, Glatteisgefahr!\n";

Verschachtelte IF-Verzweigungen

Die Anweisung, die hinter der if-Bedingung steht, kann selbst wieder eine if-Anweisung sein. Sie wird nur ausgeführt, wenn die erste if-Bedingung eintritt. Eine solche Folge von Abfragen nennt man Verschachtelung.

int a=0, b=0;
int c=2;
if (a==0)
    if (b==0)
        c=0;
cout << c << endl;

Die Abfrage, ob die Variable b 0 enthält, wird nur gestellt, wenn die Variable a den Inhalt 0 hat. Nur wenn beide Variablen 0 sind, wird die Variable c auf 0 gesetzt. Ansonsten enthält sie weiterhin 2.

Andernfalls: ELSE (Wenn-Dann-Sonst)

Kehren wir zum Divisionsbeispiel zurück. Es wäre schön, wenn das Programm nicht nur prüft, ob der Divisor ungleich 0 ist, sondern den Anwender darüber informieren würde, dass es die Division gar nicht durchführt. Diese Meldung sollte genau dann erscheinen, wenn die if-Bedingung nicht zutrifft. Das könnten Sie erreichen, indem Sie zwei gegensätzliche if-Konstruktionen hintereinander setzen:

if (Divisor != 0)
    Ergebnis = Dividend / Divisor;
if (Divisor == 0)
    cout << "Divisor ist 0! Keine Berechnung!";

Da solche Konstruktionen immer wieder gebraucht werden, bietet C++ einen eigenen Befehl an, um den gegenteiligen Fall der Bedingung abzudecken. Das Schlüsselwort dazu heißt else.

if (Divisor != 0)
    Ergebnis = Dividend / Divisor;
else
    cout << "Divisor ist 0! Keine Berechnung!";

Beispiel Glatteis mit else

Lautet die Antwort im vorigen Beispiel „nein“, wird im Nein-Zweig weitergemacht. Wenn dort ebenfalls eine Anweisung steht, wird diese ausgeführt. Der Nein-Zweig wird mit dem Schlüsselwort else eingeleitet. Nun soll bei Plusgraden folgende Meldung erscheinen: „Plusgrade, trotzdem Geschwindigkeit beachten!“

Der C++-Code dazu sieht nun so aus:

if (cgrad<=0)
    cout << "Achtung, Glatteisgefahr!\n";
else
    cout << "Plusgrade, trotzdem Geschwindigkeit beachten!\n";

Beispiel Glatteis 3

Sollen in einem der Zweige mehrere Anweisungen durchgeführt werden, dann werden sie in { und } eingeschlossen und so zu einer zusammengesetzten Anweisung zusammengefasst.

Beispielsweise könnte das Programm so aussehen:

if (cgr<=0)
    {cout << "Achtung, Glatteisgefahr!\n";
     cout << "Geschwindigkeit den Gegebenheiten anpassen!\n";
    }
else
    {cout << "Plusgrade..."\n;
     cout << "Trotzdem Geschwindigkeit beachten!\n";
    }

Beispiel Teilbarkeit

Erstelle ein Programm, das überprüft, ob eine natürliche Zahl n durch eine andere Zahl m teilbar ist.
Die beiden Zahlen n und m sollen vom Benutzer eingegeben werden könnnen. Das Programm soll dann entweder „m teilt n“ oder „m teilt n nicht“ melden.
(Speicher dein Programm unter teilbarkeit.cpp

Hinweis: Ob eine Zahl m eine andere Zahl n, teilt kannst du am besten mit dem Modulo-Operator „%“ überprüfen. Dh. du überprüfst, ob der Rest bei der Teilung == 0 ist!

Beispiel Testauswertung

Erstelle ein Programm, dass deinen Lehrern hilft, den erreichten Prozentsatz bei einem Test auszurechnen. Dazu soll vom Benutzer/der Benutzerin die maximale Punktezahl und die vom Schüler/der Schülerin erreichte Punktezahl eingegeben werden können. Anschließend wird dann der Prozentsatz ermittelt.
Liegt der Prozentsatz über 50%, so soll zusätzlich zum Prozentsatz „Bestanden!“ ausgegeben werden,
Liegt der Prozentsatz unter 50%, so soll zusätzlich zum Prozentsatz „Leider nicht bestanden!“ ausgegeben werden.
Speichere dein Programm unter testauswertung.cpp

Hinweis: Prozentsatz = Anteil/Grundwert