i

Strukturierung – Logische Operatoren

Zielsetzung

Bedingungen sind wesentlicher Bestandteil von Wiederholungen oder Fallunterscheidungen. Die elementaren Bedingungen, die PythonKara (oder eine andere Programmiersprache) zur Verfügung stellt, kommen aber sehr schnell an ihre Grenzen: Zum Beispiel beim Problem aus der Erkundung ist es wichtig, mehrere Bedingungen miteinander zu kombinieren. Darum geht es hier.

Wahrheitswerte

Eine Bedingung wie auf einem Kleeblatt oder kara.treeLeft() or kara.treeFront() wird im Programm ausgewertet. Das bedeutet: Python überprüft, ob die Bedingung erfüllt ist. Dabei ist sie wahr oder falsch, es gibt keinen Zustand „dazwischen“.

Bedingungen werden ausgewertet, es wird also überprüft, ob sie erfüllt sind oder nicht. Das Ergebnis dieser Überprüfung ist ein Wahrheitswert: wahr oder falsch bzw. True oder False.

Aufgabe 1: Eindeutig wahr oder falsch

(a) Erkläre kurz, warum es für Fallunterscheidungen und while-Schleifen wichtig ist, dass es bei Bedingungen immer einen eindeutigen Wahrheitswert und keine Zwischenzustände („Halb-wahr“) gibt.

(b) Woran erkennt man dies im Flussidagramm?

Komplexe Bedingungen

Komplexe Bedingungen bildet man mit drei grundlegenden Mitteln, den logischen Operatoren. Diese schauen wir uns nun an.

Aufgabe 2: Der not-Operator

Der not-Operator ist besonders einfach, weil er nur mit einer Bedingung arbeitet – er verbindet nicht zwei Bedingungen miteinander. Deshalb schauen wir ihn uns zuerst an.

(a) Vervollständige folgenden Satz:

Wenn die Bedingung kara.onLeaf() erfüllt ist (Wahrheitswert True), dann ist die Bedingung not kara.onLeaf() ...

(b) Vervollständige:

  • not True =
  • not False =

(c) Alida hat den not-Operator mit dieser Tabelle erklärt. Warum hat die Tabelle zwei Zeilen (unter der Überschriftszeile)? Warum reicht die Tabelle aus, um den Operator ganz zu verstehen?

a not a
False True
True False

Aufgabe 3: Die anderen Operatoren in Aktion

Zuerst probieren wir die beiden verbleibenden Operatoren in konkreten Situationen aus: Kara überprüft, ob rechts/links ein Baum ist. Erst in der nächsten Aufgaben verallgemeinern wir das Ergebnis.

Wir betrachten die Bedingungen kara.treeLeft() and kara.treeRight() sowie kara.treeLeft() or kara.treeRight(). Entscheide für die folgenden vier Situationen und jeweils für beide Bedingungen, ob die Bedingung erfüllt ist oder nicht.

Überprüfe mit PythonKara, ob du richtig lagst. Dafür kannst du z.B. abhängig von der Bedingung einen Schritt machen lassen. Macht Kara den Schritt, war die Bedingung erfüllt; macht Kara keinen, war die Bedingung nicht erfüllt.

Situationen mit Kara und Bäumen

Aufgabe 4: Ein genauerer Blick auf and und or

Du hast in der vorherigen Aufgabe die beiden Operatoren and und or in einer konkreten Situation analysiert. Nun übertragen wir das auf eine allgemeine Beschreibung der Operatoren mit einer Tabelle.

(a) So wie den not-Operator in Aufgabe 2, kann man auch and und or mit einer Tabelle beschreiben. Erst notiert man dabei links die möglichen Fälle, die die Bedingungen einnehmen können. Die Bedingungen heißen hier a und b Ordne die einzelnen Zeilen der Tabelle den vier Fällen aus Aufgabe 3 zu, wenn a für kara.treeLeft() und b für kara.treeRight() steht.

a b
False False
False True
True False
True True

(b) In einer solchen Tabelle kann man nun mit weiteren Spalten weitere logische Operatoren (oder noch kompliziertere Ausdrücke) beschreiben. Fülle die folgende Tabelle, um die Operatoren and und or zu erklären. Du kannst dafür auch direkt den unteren Abschnitt des Wissensspeichers nutzen.

a b a and b a or b
False False
False True
True False
True True

Sicherung und Vertiefung

Es kann sinnvoll sein, wenn du erst einmal einige Übungsaufgaben bearbeitest, bevor du die weiteren Aufgaben auf dieser Seite angehst. So wird dein Verständnis für logische Operatoren Stück für Stück immer weiter geschärft.

Aufgabe 5: Das Wichtigste notieren

Halte das Gelernte fest, indem du den unteren Abschnitt des Wissensspeichers ausfüllst.

Aufgabe 6: Logische Operatoren vertiefen

In dieser Aufgabe sollst du dich noch intensiver mit den logischen Operatoren befassen.

(a) Benjamin meint, dass not so etwas ähnliches wäre, wie eine Zahl mit $-1$ zu multiplizieren. Welche Gemeinsamkeiten dazwischen siehst du?

(b) Claudia bringt Essen für eine Party mit und soll ihrer Freundin Dani eine Pizza oder Nudeln mitbringen. Sie kommt mit einer Pizza und Nudeln an. Dani ist irritiert. – Diese kurze Geschichte verdeutlicht, dass das sprachliche „Oder“ manchmal anders funktioniert als das logische Oder (or). Erkläre den Unterschied. Wie hätte Dani ihre Bestellung präziser aufgeben können, damit sie nicht enttäuscht wird?

Aufgabe 7: Über die Anzahl von Tabellenzeilen

Solche Tabellen wie in Aufgabe 4 braucht man sehr oft, wenn man mit logischen Ausdrücken arbeitet. Das geschieht nicht nur hier, sondern auch z.B. bei der Digitaltechnik oder im Exkurs zur Bool'schen Algebra. Grund genug, uns die Tabellen näher anzusehen.

(a) Warum hat die Tabelle in Aufgabe 4 eigentlich (nach der Überschriftzeile) vier Zeilen? Erkläre anschaulich mithilfe von Aufgabe 3.

(b) Wir versuchen die Erklärung aus Teil (a) mathematischer zu gestalten: Erkläre, warum man bei zwei Bedingungen (a und b) auf vier Zeilen kommt. Tipp: Ein Baumdiagramm kann helfen.

(c) Verallgemeinere dein Ergebnis aus Teil (b): Wie viele Zeilen hättest du bei drei Bedingungen (a, b, c)? Erkläre. Wie viele Zeilen hat man bei $n$ Bedingungen? Gib einen allgemeinen Term an und erkläre.

Aufgabe 8: Wahrheitswerte als Bedingungen

Eine Bedingung ist ein Ausdruck, mit dem man Programme steuern kann. Dafür muss im Programm dann ausgewertet werden, welchen Wahrheitswert eine Bedingung aktuell hat (das kann sich ja im Laufe des Programms ändern). Doch statt die Sensoren von Kara zu nutzen, kann man auch direkt Wahrheitswerte als Bedingungen verwenden. Darum geht es in dieser Aufgabe. Du kannst das Ergebnis in der vierten Übungsaufgabe gebrauchen.

Beurteile, ob es Sinn ergibt, als Bedingung direkt einen Wahrheitswert einzusetzen. Betrachte dafür insbesondere diese vier Fälle: Was geschieht, wenn dieser Programmausschnitt ausgeführt werden soll? Wie oft wird kara.move() ausgeführt? Ergibt hier dann die Fallunterscheidung bzw. Schleife Sinn?


if False:
    kara.move()


if True:
    kara.move()


while False:
    kara.move()


while True:
    kara.move()

Suche

v
6.1.5.2
dev.inf-schule.de/imperative-programmierung/kara/logischeoperatoren/strukturierung_logischeoperatoren
dev.inf-schule.de/6.1.5.2
dev.inf-schule.de/@/page/sDMFJ04vhjZY3hsB

Rückmeldung geben