Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| gf_informatik:karatutorial:logik [2026-08-28 11:35] – [Und-Verknüpfungen] hof | gf_informatik:karatutorial:logik [2026-08-30 19:43] (aktuell) – [Präzedenz (Operatorrangfolge)] hof | ||
|---|---|---|---|
| Zeile 10: | Zeile 10: | ||
| Die Funktion `kara.treeFront()` gibt einen _Wahrheitswert_ zurück: Entweder wahr oder falsch, in Python `True` oder `False`. Kara soll solange weiterlaufen, | Die Funktion `kara.treeFront()` gibt einen _Wahrheitswert_ zurück: Entweder wahr oder falsch, in Python `True` oder `False`. Kara soll solange weiterlaufen, | ||
| - | In der Informatik nennen wir einen Wahrheitswert auch [[wpde> | + | In der Informatik nennen wir einen Wahrheitswert auch [[wpde> |
| - | ### Und-Verknüpfungen | + | |
| - | Betrachte folgendes Beispiel: Kara soll immer dann ein neues Blatt legen, wenn rechts von ihr ein Baum steht und noch keines vorhanden ist: | + | ### Konjunktion (Und-Verknüpfung) |
| + | Betrachte folgendes Beispiel: Kara soll immer dann ein neues Blatt legen, wenn noch keins vorhanden ist **und** | ||
| < | < | ||
| Zeile 33: | Zeile 34: | ||
| **Merke**: | **Merke**: | ||
| - | * mit dem Schlüsselwort `and` können | + | * mit dem Schlüsselwort `and` können |
| + | * Eine Und-Verknüpfung heisst **[[wpde> | ||
| * mit `kara.treeRight()` und `kara.treeLeft()` können wir Bäume neben Kara feststellen. | * mit `kara.treeRight()` und `kara.treeLeft()` können wir Bäume neben Kara feststellen. | ||
| * `not` bindet enger als `and`: das `not kara.onLeaf()` negiert nur die Blatt-Bedingung, | * `not` bindet enger als `and`: das `not kara.onLeaf()` negiert nur die Blatt-Bedingung, | ||
| - | + | #### Aufgabe | |
| - | #### Aufgabe Tunnel | + | |
| Hilf Kara, den Tunnel zu markieren. Schreibe Python-Code wie folgt: | Hilf Kara, den Tunnel zu markieren. Schreibe Python-Code wie folgt: | ||
| Zeile 48: | Zeile 49: | ||
| Wie lang ist der Tunnel? | Wie lang ist der Tunnel? | ||
| - | < | + | < |
| < | < | ||
| | | ||
| Zeile 68: | Zeile 69: | ||
| </ | </ | ||
| </ | </ | ||
| + | ### Disjunktion (Oder-Verknüpfung) | ||
| - | ### Oder-Verknüpfungen | + | Wir können auch zwei Booleans so verknüpfen, |
| - | Natürlich | + | |
| + | #### Aufgabe D2: Tunnelräumung | ||
| Schreibe Code, der immer dann ein Blatt entfernt, wenn links oder rechts von Kara ein Baum steht. Stoppe, wenn du einen Baum vor dir hast. | Schreibe Code, der immer dann ein Blatt entfernt, wenn links oder rechts von Kara ein Baum steht. Stoppe, wenn du einen Baum vor dir hast. | ||
| - | < | + | < |
| < | < | ||
| | | ||
| Zeile 94: | Zeile 96: | ||
| </ | </ | ||
| </ | </ | ||
| + | ### Präzedenz (Operatorrangfolge) | ||
| + | In der Mathematik gilt [[wpde> | ||
| + | - Negierung (`not`) | ||
| + | - Konjunktion (`and`) | ||
| + | - Disjunktion (`or`) | ||
| + | |||
| + | Im Beispiel unten: | ||
| + | * beim ersten Blatt dreht Kara links (die erste Hälfte der Disjunktion ist wahr: beide Bedingungen `kara.onLeaf() and not kara.treeLeft()` sind wahr). | ||
| + | * beim Pilz dreht Kara ebenso links (die zweite Hälftet der Disjunktion ist wahr: `kara.mushroomFront()`). | ||
| + | * beim zweiten Blatt dreht Kara *nicht*: | ||
| + | * `kara.mushroomFront()` ist falsch | ||
| + | * `kara.onLeaf()` ist wahr, aber | ||
| + | * `not kara.treeLeft()` ist falsch, damit ist die Konjunktion falsch, damit ist auch die Disjunktion falsch. | ||
| + | |||
| + | Mit Klammern verdeutlicht: | ||
| + | <code python> | ||
| + | |||
| + | < | ||
| + | < | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | T > L T | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | while not kara.treeFront(): | ||
| + | if kara.onLeaf() and not kara.treeLeft() or kara.mushroomFront(): | ||
| + | kara.turnLeft() | ||
| + | kara.move() | ||
| + | </ | ||
| + | |||
| + | |||
| + | #### Aufgabe D3: Logisch | ||
| + | Betrachte folgenden Code und Karas Welt! Auf welchem Feld wird Kara am Ende des Programms sein? | ||
| + | |||
| + | <WRAP group> | ||
| + | <WRAP column twothirds> | ||
| + | <code python> | ||
| + | while not kara.treeFront(): | ||
| + | if kara.onLeaf() and kara.treeRight(): | ||
| + | kara.turnLeft() | ||
| + | if kara.onLeaf() and kara.mushroomFront(): | ||
| + | kara.turnLeft() | ||
| + | kara.turnLeft() | ||
| + | if kara.mushroomFront() or kara.treeLeft(): | ||
| + | kara.turnRight() | ||
| + | kara.move() | ||
| + | </ | ||
| + | </ | ||
| + | <WRAP column third> | ||
| + | {{.: | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <nodisp 2> | ||
| + | ++++Lösung| | ||
| + | |||
| + | Kara landet auf `J4`. | ||
| + | |||
| + | < | ||
| + | < | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | while not kara.treeFront(): | ||
| + | if kara.onLeaf() and kara.treeRight(): | ||
| + | kara.turnLeft() | ||
| + | if kara.onLeaf() and kara.mushroomFront(): | ||
| + | kara.turnLeft() | ||
| + | kara.turnLeft() | ||
| + | if kara.mushroomFront() or kara.treeLeft(): | ||
| + | kara.turnRight() | ||
| + | kara.move() | ||
| + | </ | ||
| + | ++++ | ||
| + | </ | ||
| + | |||
| + | #### Aufgabe D4: Blätter um die Bäume | ||
| + | Schreibe Python-Code, | ||
| + | * Kara macht die folgenden Schritte, solange kein Pilz vor ihr steht: | ||
| + | * wenn links oder rechts ein Baum steht und kein Blatt vorhanden ist: | ||
| + | * dann legt sie eins hin. | ||
| + | * wenn ein Baum vor ihr ist, | ||
| + | * so wendet dreht sie einmal nach rechts. | ||
| + | * andernfalls: | ||
| + | |||
| + | < | ||
| + | < | ||
| + | | ||
| + | T M TTT TT | ||
| + | T > | ||
| + | T T TTT T | ||
| + | TT TTT LT | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | < | ||
| + | while not kara.mushroomFront(): | ||
| + | if (kara.treeLeft() or kara.treeRight()) and not kara.onLeaf(): | ||
| + | kara.putLeaf() | ||
| + | if kara.treeFront(): | ||
| + | kara.turnRight() | ||
| + | else: | ||
| + | kara.move() | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | | ||
| + | T M TTT TT | ||
| + | T L LLLL LT | ||
| + | T T TTT LT | ||
| + | | ||
| + | | ||
| + | TTL MT TT | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||