Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - Entscheidungen treffen

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

 

  • Gib das unten stehende Programm ein.
  • Speichere es über  Save Project As unter dem Namen A05_01 ab.
  • Erläutere Zeile für Zeile, was das Programm tut. Wieviele Mitteilungen erscheinen im Terminal?
  • Starte anschließend das Programm mit Run with Terminal und vergleiche die Vorhersage mit dem tatsächlichen Programmverlauf.
  • Was passiert, wenn die Zuweisungswerte von a und b vertauscht werden. Gib eine Prognose, ändere dann das Programm ab und starte es erneut.

 

 

Programm A05_01.c

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.

  • Ordne der Variablen a den Wert –25 und b den Wert –17 zu.
  • Welcher der beiden Zahlen ist jetzt größer?
  • Starte das Programm neu und überprüfe das Ergebnis. 
  • Erweitere das Programm mit weiteren Befehlsblöcken, in denen alle oben genannten sechs relationalen Operatoren abgefragt werden. Speicher das Programm unter dem Namen  A05_02 ab.

 

 

Programm A05_02.c

Programm A05_02.c
Terminalausgabe zu Programm A05_02.c

2 - Mehrfachentscheidungen

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

 

  • Schreibe das Programm A06_01 ab und speicher es ab mit  Save Project As.
  • Versuche im Programm herauszufinden, welches Ergebnis auf dem Terminal angezeigt wird, wenn die Variablen a und b vorbelegt sind mit: a = 25 und b = 17. Wiederhole den Vorgang für a = 17 und b = 25 und für a = 25 und b = 25.
  • Starte das Programm mit  Run with Terminal und überprüfe für die drei genannten Kombinationen deine Vorhersagen.

 

 

Programm A06_01.c

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

 

  • Speichere das Projekt A06_01 mit  Save Project As unter dem Namen A06_02 ab.
  • Füge die unten angegebenen vier Zeilen in das Programm ein.
  • Weise b den Wert 1000 zu, starte das Programm  Run Project with Console  und überprüfe das Ergebnis.
  • Ändere den Wert von b auf 999 ab und starte das Programm erneut. Zeigt das SimpleIDE Terminal in beiden Fällen korrekte Ergebnisse an?

 

Programm A06_02.c

Häufig kommt es vor, dass eine Entscheidung erst dann getroffen werden kann, wenn

  • gleichzeitig Bedingung 1 UND Bedingung 2 eingetreten sind oder
  • wenn ENTWEDER Bedingung 1 ODER Bedingung 2 eingetreten sind.

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

 

  • Schreibe das untenstehende Programm ab und speicher es mit  Save Project As unter dem Namen A07_01 ab.
  • Versuche den Programmablauf nachzuvollziehen; wie viele Mitteilungen werden im Terminal ausgegeben? Begründe die Antwort.
  • Starte mit  Run Project with Terminal das Programm und vergleiche das angezeigte Ergebnis mit den Vorhersagen.

 

 

Programm A07_01.c

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

 

  • Veränder das aktuelle Programm so wie unten beschrieben und speicher es mit Save Project As unter dem Namen A07_02 ab.
  • Überlege wie das Programm arbeitet und was auf dem Terminal angezeigt wird.
  • Verändere a und b so, dass nur eine Mitteilung auf dem Terminal erscheint.

 

 

Programm A07_02.c

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:

  • „Die Variable a hat einen Wert zwischen 100 und 200 erreicht!“ oder
  • „Die Variable b einen einen Wert zwischen 100 und 200 erreicht!“

 

Kommentar schreiben

Kommentare

  • olaf (Sonntag, 10. Dezember 2017 08:35)

    wow...die mit Abstand beste Site, die ich bisher zu diesem Thema gesehen habe :-))
    Vielen Dank dafür. Hilft super beim Erklären!!

  • David Eisenblätter (Sonntag, 11. Februar 2018 13:38)

    Sehr schön erklärt, und zufällig heute, wo ich nochmal nach einer detailierten Gedankenstütze diesbezüglich gesucht habe!

    Vielen vielen Dank!

    David.

Bitte geben Sie den Code ein
* Pflichtfelder
Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf