Verzweigungen

Normalerweise werden Programmzeilen innerhalb eines Blocks der Reihe nach von oben nach unten abgearbeitet. Soll ein gewisser Teil unseres Programms aber nur ausgeführt werden, wenn eine bestimmte Bedingung zutrifft, dann kommen wir um Logik und die sogenannten Verzweigungen nicht herum.

C++ verwendet im Gegensatz zu C einen eigenen Typen, bool, um die logischen Werte Wahr und Falsch auszudrücken. Falsch wird durch das Schlüsselwort bzw. den Wert false dargestellt, Wahr durch den Wert true.

Die einfachste Verzweigung in C++ geschieht durch die if-Anweisung.:

// Wenn die Bedingung erfüllt (true) ist,
// dann führe Befehl1 aus (alles bis zum Semikolon)
// sonst führe Befehl2 aus
if( Bedingung )
    Befehl1;
else
    Befehl2;

// Wenn die Bedingung erfüllt (true) ist,
// dann führe den nachfolgenden Block aus
// (alle Befehle innerhalb der geschwungenen Klammern)
if( Bedingung )
{
    Befehl;
    Befehl;
}

Operatoren

Mal und Plus haben wir im vorherigen Beispiel als Operatoren verwendet. Es gibt noch wesentlich mehr Operatoren in C++, von denen wir in den weiteren Beispielen noch einige wenige benötigen.

C++ unterscheidet zwischen verschiedenen Operatorgruppen, die auch verschiedene Rangfolgen besitzen (Punkt vor Strich, etc.). Arithmetische, binäre Operatoren wie +, -, *, / sollten kein größeres Problem darstellen, weitere Operatoren sind erklärungsbedürftig.

Vergleiche

Um Verzweigungen überhaupt sinnvoll nutzen zu können, müssen wir Zahlen vergleichen können. Das folgende Fragment enthält verschiedene Vergleichsoperatoren:

if( 5 <  5 ) cout << "1"// ist 5 kleiner als 5?
if( 5 <= 5 ) cout << "2"// ist 5 kleiner gleich 5?
if( 5 == 5 ) cout << "3"// ist 5 gleich 5?
if( 5 != 5 ) cout << "4"// ist 5 ungleich 5?
if( 5 >= 5 ) cout << "5"// ist 5 größer gleich 5?
if( 5 >  5 ) cout << "6"// ist 5 größer als 5?

Von den Vergleichen liefern natürlich nur die Fälle 2, 3 und 5 den Wert true. Nach der Abarbeitung des Fragments stünde also "235" auf dem Bildschirm.

Logische Operatoren

Verschiedene Vergleiche lassen sich durch logische Operatoren auch zu komplexeren Bedingungen verknüpfen. Natürlich lassen sich nicht nur Zahlen, sondern auch Variablen vergleichen.

// logisches UND durch "&&"
if( a==b && b==c )
    cout << "a, b und c sind gleich" << endl;

// logisches ODER durch "||"
if( a==b || b==c )
    cout << "a und b oder b und c sind gleich" << endl;
else
    cout << "a, b und c sind verschieden" << endl;

// logisches NICHT durch "!"
if( a==b && !(b==c) )
{
    cout << "a und b sind gleich, ";
    cout << "nicht aber b und c" << endl
}

Ein Fallstrick ist, dass wie in C auch Zahlen für Wahrheitswerte stehen können, dabei steht eine Null für Falsch und alle anderen Zahlen für Wahr. Im Normalfall gibt der Compiler aber in diesem Fall eine Warnung aus.

Unäre Operatoren ++ und --

C++ bedeutet "C um eins erhöht". Der ++-Operator ist unär (nicht binär), da er statt zwei Werte zu verbinden, nur einen einzigen modifiziert. Zum ++-Operator folgendes Fragment:

// Deklariere zwei Variablen, initialisiere nur j mit 0
int i, j = 0;

// addiere eins zur Variablen j
// (danach ist i noch immer undefiniert, j = 1)
j = j+1;

// addiere wiederum eins zur Variablen j,
// weise danach den Wert von j auch der Variablen i zu
// (danach ist i = 2, j = 2)
i = j = j+1;

// dasselbe in grün
// (danach ist i = 3, j = 3)

i = ++j;

// post-inkrement:
// weise den Wert von j der Variablen i zu,
// addiere danach eins zu j hinzu
// (danach ist i = 3, j = 4)

i = j++;

// FEHLER: Einer Konstanten (der Fünf)
// kann kein Wert zugewiesen werden!
i = 5++;

Der Post-Inkrement ist etwas kryptisch, deshalb werden die Operatoren ++ und -- meist ohne gleichzeitige Zusweisung verwendet, z.B. in while- und for-Schleifen, zu den wir später kommen.

Modulo

Zu einem besonderen arithmetischer Operator, den wir später einsetzen werden. Sehen wir uns folgendes Fragment an:

if( (i%3) == 0 )
{
    cout << "i ist durch drei teilbar!" << endl;
}

Das Codefragment lässt sich in natürliche Sprache so übersetzen: "Wenn der Rest von i/3 Null ist, dann gebe aus, dass sich i durch drei teilen lässt."

Das %-Zeichen ist der sogenannte Modulo-Operator und a%b bedeutet nichts anderes als "Rest aus a/b". Beispiel:

2%3 ergibt 2,
7%3 ergibt 1,
9%3 ergibt 0, etc.

zurück