6.4 Logik für Fortgeschrittene

In Programmen können die Bedingungen recht komplex werden. Für unsere if-Abfragen haben wir uns einfache Beispiele angeschaut. Selbst im täglichen Leben können Bedingungen komplex werden:

„Wenn ich heute Abend nicht zu müde bin, und wenn meine Freunde keinen anderen Vorschlag haben oder sie eh nichts unternehmen wollen, und wenn ein guter Film läuft, dann werde ich ins Kino gehen.“

Diese Gedanke mag nicht jeden Tag üblich sein. Aber er kann schon in dieser oder ähnlicher Form vorkommen. Schauen wir uns mal die Bedingungen genau an:

1. Wenn ich heute Abend nicht zu müde bin, und
2. wenn meine Freunde keinen anderen Vorschlag haben oder sie eh nichts unternehmen wollen, und
3. wenn ein guter Film läuft

Das sind 3 Bedingungen, die durch ein „und“ verknüpft sind. Zusätzlich gibt es noch die oder-Verknüpfung in der 2. Bedingung. Schauen wir uns erst einmal an, wie sich „und“ und „oder“ unterscheiden.

Dafür müssen wir erst einmal herausfinden, was es genau bedeutet, dass 2 Bedingungen verknüpft werden. Für Sonic Pi ist das einfach. Wir wissen, eine Bedingung kann wahr oder falsch sein. Wenn nun 2 Bedingungen verknüpft werden, dann ist die entscheidende Frage: Ist jetzt die Verknüpfung aus beiden Bedingungen wahr oder falsch?

Also, wenn beide Bedingungen wahr sind, dann ist auch die „und“-Verknüpfung wahr. Jetzt gibt es jede Menge andere Möglichkeiten und dann noch die „oder“- Verknüpfung dazu. Um das ganze etwas übersichtlich zu gestalten, gibt es Wahrheitstafeln. Die folgende Tabelle zeigt die 4 Möglichkeiten:

 

Diese Tabelle ist in die Logik von Sonic Pi eingearbeitet. In den Spalten 1 und 2 sind für die 2 Bedingungen die möglichen Zustände eingetragen. Insgesamt gibt es 2*2 = 4 Kombinationen. In den Spalten 3 und 4 sind dann die Zustände für die „und“-Verknüpfung und „oder“ Verknüpfung eingetragen.

Schauen wir uns einmal die Fall 3 als Beispiel an. Die Vorgabe ist, das Bedingung A nicht erfüllt und also falsch ist, während Bedingung B erfüllt und damit wahr ist. Während die „und“-Verknüpfung nun falsch ist, ist die „oder“-Verknüpfung wahr.
Wie könnte nun ein Beispiel im täglichen Leben aussehen:

Bedingung A: Wenn meine Schule es erlaubt…
Bedingung B: Wenn mein Handy ein Guthaben hat…
dann
…kann ich das Handy in der Pause benutzen
sonst
.. muss ich auf das Handy verzichten

Jetzt ergibt sich die Frage, ob hier eine und-Verknüpfung oder eine oder-Verknüpfung sinnvoll ist? Man kann sich das leicht überlegen. Bei „oder“ reicht eine wahre Aussage aus, damit das Handy benutzt werden kann. Und das ist definitiv nicht richtig. Schließlich ist ein Guthaben zu haben eine unabdingbare Voraussetzung. Also ist die und-Verknüpfung notwendig.

Und in Sonic Pi? Wie die Bedingungen mit einem Vergleichsoperator aufgebaut sind hatten wir schon besprochen. Jetzt ist nur noch offen, wie sich die Bedingungen kombinieren lassen. Wie sehen also die entsprechenden und/oder Verknüpfungen aus?
Ganz einfach:

„und“ ist in Sonic Pi: &&
„oder“ ist in Sonic Pi: ||
Code 12 zeigt ein Beispiel.

Die Bedingungen in Sonic Pi können durch Klammern strukturiert werden. Existieren keine Klammern, so werden sie von links nach rechts ausgewertet.

Aufgaben
12. Im Code unten wird die Division zweimal aufgeführt. Und tatsächlich sind die Ergebnisse der Rechnung verschieden. Erkläre den Unterschied in dem Term und dem Ergebnis.
dividend = 26
divisor = 5
quotient = dividend / divisor
puts quotient

dividend = 26
divisor = 5.0
quotient = dividend / divisor
puts quotient

13. Die Wahrheitstafel enthält 4 Fälle. Wie viele Fälle wären notwendig, wenn 3 Bedingungen verknüpft werden müssen. Welche Kombinationen sind das?

14. Erweitere das Beispiel in Sonic Pi so, dass 3 Bedingungen berücksichtigt werden.

15. Welcher Sound wird im folgenden Codeschnipsel von Sonic Pi benutzt und warum?
greeting = „Guten Tag“
if greeting == „Guten Tag “
use_synth :fm
end

play 80

16. Bitte überprüfe in Sonic Pi, ob „nicht a und nicht b“ das gleiche ist wie „nicht (a oder b)“.

################################
# Logic 2
# Hans Gruendel
# 10.4.2016
################################

tone1 = 71
tone2 = 81

if tone1==71 || tone2==80
use_synth :fm
else
use_synth :piano
end

play 80

sleep 1

if tone1==71 && tone2==80
use_synth :fm
else
use_synth :piano
end

play 80
Code 12. Kombinierte Bedingungen

 

Spalte

1

2

3

4

Fall

Bedingung A

Bedingung B

Und-Verknüpfung

Oder-Verknüpfung

1

wahr

wahr

wahr

wahr

2

wahr

falsch

falsch

wahr

3

falsch

wahr

falsch

wahr

4

falsch

falsch

falsch

falsch