Eine Programmentscheidung tritt immer dann auf, wenn bei mehreren Eingabegrößen entschieden werden muss, wie das Programm fortfahren soll.
In den folgenden Beispielen schauen wir uns an, wie Entscheidungen aussehen können, die von Werten vorgegebener Variabler abhängen. In späteren Übungen werden Entscheidungen getroffen werden, die von
den Rückgabewerten irgendwelcher Sensoren abhängen.
Im folgenden Beispiel wird den Variablen a und b je ein Wert zugewiesen; ist der Wert von a größer als der Wert von b, dann gibt das Programm den Text aus
Der Wert von a ist größer als der Wert von b.
Übung 1
Programm A05_01.c
Wie arbeitet das Programm A05_01.c?
Zeilen 9 und 10
Das Programm weist der Variablen a den Wert 25 und b den Wert 17 zu;
Zeile 11
Beide Werte werden auf dem SimpleIDE Terminal angezeigt.
Zeile 12
Ist a größer als b, dann wird der Text ausgegeben (Zeile 14), im anderen Fall passiert nichts.
Was du wissen solltest!
Das Symbol > ist ein sogenannter relationaler Operator. Es gibt weitere relationale Operatoren. Du findest sie in der folgenden Auflistung; ihre Bedeutung steht daneben:
== gleich
!= nicht gleich
> größer als
>= größer als oder gleich
< kleiner als
<= kleiner als oder gleich
In der Sprache C gibt die Abfrage a > b den Wert 0 zurück, wenn die Aussage falsch ist (a ist nicht größer als b) und 1 wenn sie zutrifft (ja, a ist größer als b).
Im Programm A05_01.c werden, wenn die Bedingung a > b zutrifft (Zeile 12 - der Rückgabewert ist dann 1), alle Befehle innerhalb der geschweiften Klammern ausgeführt, während der Befehlsblock übersprungen wird, wenn die Entscheidungsabfrage den Wert 0 zurückliefert.
Übung 2
Vergleiche von negativen Zahlen können ganz interessant sein.
Programm A05_02.c
Bei einem IF-Entscheidungsbefehl wird der sich anschließende Befehlsblock immer dann ausgeführt, wenn die Relation erfüllt ist. Tauchen in einem Programm mehrere Entscheidungsbefehle auf, die für eine bestimmte Situation alle als wahr eingestuft werden, dann müssten gleich mehrere Befehlsblöcke ausgeführt werden. Das ist nicht immer hilfreich und man wünscht sich dann eine Möglichkeit, nur einen Befehlsblock auszuführen.
Beispiel 1: Der Controller soll entscheiden, ob eine der drei Möglichkeiten: a ist größer als b, a ist kleiner als b oder a ist gleich b zutrifft und diese dann auf dem Terminal ausgegeben.
Beispiel 2: Ein Roboter, der mit zwei Kontaktsensoren ausgerüstet ist, soll sich, je nachdem welcher der beiden Sensoren betätigt wurde, in die eine oder andere Richtung drehen oder sich – wenn
beide Kontakte gleichzeitig berührt werden - zurück bewegen.
Übung 3
Programm A06_01.c
Wie arbeitet das Programm A06_01.c?
Zeile 14
Die if...else if...else- Anweisung überprüft zuerst, ob a größer als b ist. Wenn das der Fall ist,
Zeile 16
… wird der entsprechende Text ausgegeben: a ist größer und die folgenden Anweisungen (Zeile 17 – 25) werden übersprungen.
Zeile 18
Trifft a größer als b nicht zu, wird in Zeile 18 (else if - Anweisung) verzweigt und untersucht, ob gilt: a < b.
Zeile 20
Ist diese Relation wahr, wird die zugehörige Mitteilung ausgegeben (Zeile 20);
Zeile 22
Ist sie nicht wahr, wird wiederum zur nächsten Bedingungen weitergegangen und der Text, wie er in Programmzeile 24 dargestellt wird, auf dem Terminal ausgegeben.
Was du wissen solltest!
Es lassen sich weitere else if - Anweisungen zwischen der ersten if und der letzten else-Anweisung unterbringen.
Die letzte else-Anweisung ist optional.
In dem folgenden Programm gibt es zwei else if- Anweisungen im if ... else if .. else-Block. Die erste Bedingung überprüft, ob b größer oder gleich 1000 ist. In diesem Fall gibt das Programm eine Warnmeldung aus.
Bei einem Industrieroboter oder Industrieanlagen sind die Abfragebedingungen wesentlich komplexer und es wird schwieriger eine entsprechende Abbruchbedingung zur Schadensbehebung zu formulieren. In
unserem Fall soll gelten, wenn b größer als a aber nicht gleich 1000 ist, dann erfolgt eine Standardmeldung.
Übung 4
Häufig kommt es vor, dass eine Entscheidung erst dann getroffen werden kann, wenn
Das Programm A07_01 ist ein Beispiel für einen Entscheidungsprozess, bei dem Bedingung 1 UND Bedingung 2 vorliegen müssen, damit eine entsprechende Handlung ausgeführt wird. Das Symbol für die logische UND-Verknüpfung ist der Operator &&.
Übung 5
Programm A07_01.c
Wie arbeitet das Programm A07_01.c?
Die Anweisung if((a > b) && (a == 100)) in Zeile 13 lässt sich übersetzen mit
Wenn a größer als b ist UND a dabei auch noch den Wert 100 angenommen hat, dann mache das, was im { }-Block steht.
Was du wissen solltest!
Der Operator && heißt auch logischer Operator. Die folgenden logischen Operatoren stehen zur Verfügung:
&& logische UND Verknüpfung
|| logische ODER Verknüpfung
! Invertiert den Wahrheitswert des Ergebnisses: aus WAHR
wird FALSCH und umgekehrt.
Es ist offensichtlich, dass bei einer UND-Verknüpfung das Ergebnis nur dann WAHR ist, wenn beide Bedingungen eingetreten sind. Bei einer ODER-Verknüpfung ist das Ergebnis genau dann WAHR, wenn die eine oder die andere Bedingung oder beide Bedingungen erfüllt sind. Das führt uns zu einer neuen Übung 6.
Übung 6
Programm A07_02.c
Aufgabe
Schreibe ein Programm, das für zwei Variable a und b eine bestimmte Mitteilung auf dem Terminal ausgibt, wenn eine der beiden Variablen einen Wert zwischen 100 und 200 an-nimmt.
Die Mitteilung könnte lauten: