if ( <logischer ausdruck> ) <anweisung_A> else <anweisung_B> |
und zählt ihrerseits wiederum als Anweisung. Der else
-Zweig
kann weggelassen werden (einfache Alternative).
Struktogramm:
Wie so oft kann ein konkretes Problem auf verschiedene Weise
programmiert werden.
Beispiel: Wir betrachten dazu die Berechnung der
Heaviside-Funktion
// Rahmenprogramm #include <iostream.h> main() { double x,y; cout << endl << " Input Argument : "; cin >> x; // Version a // Version b // Version c // Version d } |
Variante a: einfache Alternative
// Version a { y = 0.0 ; if ( x >= 0. ) y = 1.0 ; // genau eine Anweisung im if-Zweig cout << " Result of version a) : " << y << endl; } |
Variante b: zweifache Alternative
// Version b { if ( x >= 0.0 ) y = 1.0 ; else y = 0.0 ; cout << " Result of version b) : " << y << endl; } |
Variante c: zweifache Alternative mit Blöcken
// Version c { if ( x >= 0.0 ) { y = 1.0 ; } else { y = 0.0 ; } cout << " Result of version c) : " << y << endl; } |
Variante d: Entscheidungsoperator.
Treten in einer zweifachen Alternative in jedem Zweig nur je eine
Wertzuweisung zur selben Variablen auf (wie in Versionen b) und c)),
dann kann der Entscheidungsoperator
// Version d { y = (x >= 0) ? 1.0 : 0.0 ; cout << " Result of version d) : " << y << endl; } |
Beispiel: Ein weiteres Beispiel ist die Berechnung der Signum-Funktion (Vorzeichenfunktion)
Struktogramm:
Wir betrachten zwei Implementierungsvarianten, das Rahmenprogramm ist identisch zum
Rahmenpogramm auf Seite
.
Variante a: Schachtelung der Alternativen
// Version a { if ( x > 0.0 ) { y = 1.0 ; } else { if ( x == 0.0 ) { y = 0.0 ; } else { y = -1.0 ; } } cout << " Result of version a) : " << y << endl; } |
Variante b: Falls der else
-Zweig nur aus einer
weiteren if
-else
-Anweisung besteht, kann Variante a
leicht modifiziert werden.
// Version b { if ( x > 0.0 ) { y = 1.0 ; } else if ( x == 0.0 ) { y = 0.0 ; } else { y = -1.0 ; } cout << " Result of version b) : " << y << endl; } |
Allgemein kann eine solche Mehrwegentscheidung als
if ( <logischer ausdruck_1> ) <anweisung_1> else if ( <logischer ausdruck_2> ) <anweisung_2> ... else if ( <logischer ausdruck_(n-1)> ) <anweisung_(n-1)> else <anweisung_n> |
else
-Zweig wiederum optional ist.
Beispiel: Bestimmung von Minimum und Maximum zweier einzugebender Zahlen. (siehe Ex433.cc)
Struktogramm:
// Example: Maximum and Minimum of two numbers #include <iostream.h> main() { int i1,i2,min,max; cout << endl << " Input Arguments i1 i2 : "; cin >> i1 >> i2 ; if ( i1 < i2 ) { min = i1 ; max = i2 ; } else { min = i2 ; max = i1 ; } cout << " Min,Max (a) : " << min << " , " << max << endl; } |
Beispiel: Bestimmung des Minimums dreier einzugebender Zahlen. (siehe Ex434.cc)
Struktogramm:
// Example: Minimum of three numbers #include <iostream.h> main() { int i1,i2,i3,min; cout << endl << " Input Arguments i1 i2 i3 : "; cin >> i1 >> i2 >> i3; if ( i1 < i2 ) { if ( i1 < i3 ) { min = i1; } else { min = i3; } } else { if ( i2 < i3 ) { min = i2; } else { min = i3; } } cout << " Min (a) : " << min << endl; } |