Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
gf_informatik:karatutorial:logik [2026-08-28 11:54] hofgf_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, als _kein_ Baum vor ihr steht. Mit `not` verwandeln wir den Wert von `treeFront()` in ihr Gegenteil. Die Funktion `kara.treeFront()` gibt einen _Wahrheitswert_ zurück: Entweder wahr oder falsch, in Python `True` oder `False`. Kara soll solange weiterlaufen, als _kein_ Baum vor ihr steht. Mit `not` verwandeln wir den Wert von `treeFront()` in ihr Gegenteil.
  
-In der Informatik nennen wir einen Wahrheitswert auch [[wpde>Boolean]].+In der Informatik nennen wir einen Wahrheitswert auch [[wpde>Boolean]]. Das Wissenschaftsgebiet der [[wpde>Aussagenlogik]] beschäftigt sich mit der Verknüpfung von mehreren Booleans zu einem neuen Wert.
  
 ### Konjunktion (Und-Verknüpfung) ### Konjunktion (Und-Verknüpfung)
-Betrachte folgendes Beispiel: Kara soll immer dann ein neues Blatt legen, wenn rechts von ihr ein Baum steht **und** noch keines vorhanden ist:+Betrachte folgendes Beispiel: Kara soll immer dann ein neues Blatt legen, wenn noch keins vorhanden ist **und** rechts von ihr ein Baum steht:
  
 <kara-exercise step="300" id="bool_and"> <kara-exercise step="300" id="bool_and">
Zeile 34: Zeile 34:
  
 **Merke**: **Merke**:
-  * mit dem Schlüsselwort `and` können mehrere Booleans verknüpft werden. Das Resultat ist nur dann `True`, wenn alle Booleans `True` sind, sonst `False`.+  * mit dem Schlüsselwort `and` können zwei Booleans verknüpft werden. Das Resultat ist nur dann `True`, wenn beide Operanden `True` sind, sonst `False`.
   * Eine Und-Verknüpfung heisst **[[wpde>Konjunktion_(Logik)|Konjunktion]]**.   * Eine Und-Verknüpfung heisst **[[wpde>Konjunktion_(Logik)|Konjunktion]]**.
   * 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, nicht den ganzen `and`-Ausdruck.   * `not` bindet enger als `and`: das `not kara.onLeaf()` negiert nur die Blatt-Bedingung, nicht den ganzen `and`-Ausdruck.
  
-#### Aufgabe Tunnel+#### Aufgabe D1: Tunnel markieren
 Hilf Kara, den Tunnel zu markieren. Schreibe Python-Code wie folgt: Hilf Kara, den Tunnel zu markieren. Schreibe Python-Code wie folgt:
  
Zeile 69: Zeile 69:
 </kara-tests> </kara-tests>
 </kara-exercise> </kara-exercise>
- 
 ### Disjunktion (Oder-Verknüpfung) ### Disjunktion (Oder-Verknüpfung)
  
-Natürlich können wir auch mehrere Booleans so verknüpfen, dass das Resultat `True` ist, wenn mindestens einer davon `True` ist. Das Schlüsselwort dazu heiss `or` (oder), die Operation heisst **[[wpde>Diskunktion]]**.+Wir können auch zwei Booleans so verknüpfen, dass das Resultat `True` ist, wenn mindestens einer der beiden `True` ist. Das Schlüsselwort dazu heiss `or` (oder), die Operation heisst **[[wpde>Disjunktion]]**.
  
 +#### 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 96: Zeile 96:
 </kara-tests> </kara-tests>
 </kara-exercise> </kara-exercise>
- 
 ### Präzedenz (Operatorrangfolge) ### Präzedenz (Operatorrangfolge)
 In der Mathematik gilt [[wpde>Punktrechnung_vor_Strichrechnung|Punkt-vor-Strich]] - bei Boolean-Verknüpfungen gilt ebenfalls eine Rangfolge: In der Mathematik gilt [[wpde>Punktrechnung_vor_Strichrechnung|Punkt-vor-Strich]] - bei Boolean-Verknüpfungen gilt ebenfalls eine Rangfolge:
Zeile 103: Zeile 102:
   - Disjunktion (`or`)   - Disjunktion (`or`)
  
-Im Beispiel:+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 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 Pilz dreht Kara ebenso links (die zweite Hälftet der Disjunktion ist wahr: `kara.mushroomFront()`).
Zeile 111: Zeile 110:
     * `not kara.treeLeft()` ist falsch, damit ist die Konjunktion falsch, damit ist auch die Disjunktion falsch.     * `not kara.treeLeft()` ist falsch, damit ist die Konjunktion falsch, damit ist auch die Disjunktion falsch.
  
-<kara-exercise id="tunnel2" hidesolution>+Mit Klammern verdeutlicht: 
 +<code python>(kara.onLeaf() and (not kara.treeLeft())) or kara.mushroomFront()</code> 
 + 
 +<kara-exercise id="precedence" hidesolution>
 <kara-world> <kara-world>
    TTTTTTTTTTTT    TTTTTTTTTTTT
Zeile 127: Zeile 129:
         kara.turnLeft()         kara.turnLeft()
     kara.move()     kara.move()
 +</kara-exercise>
 +
 +
 +#### 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()
 +</code>
 +</WRAP>
 +<WRAP column third>
 +{{.:aufgaben:pasted:20260828-121925.png?nolink&400}}
 +</WRAP>
 +</WRAP>
 +
 +<nodisp 2>
 +++++Lösung|
 +
 +Kara landet auf `J4`.
 +
 +<kara-exercise id="boolean_walk">
 +<kara-world>
 +   TTTTTTTTTTT
 +       L T
 +   TM  L     T
 +    M  L LTT
 +      M    T
 +           T
 +   TL      T
 +       T L T
 +         TTT
 +    >    T
 +   TTTTTTTTTTT
 +</kara-world>
 +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()
 +</kara-exercise>
 +++++
 +</nodisp>
 +
 +#### Aufgabe D4: Blätter um die Bäume
 +Schreibe Python-Code, wie folgt:
 +  * 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: geht sie einen Schritt weiter
 +
 +<kara-exercise id="planter" step="100" hidesolution>
 +<kara-world>
 +   TTTTTTTTTTT
 +   T M TTT  TT
 +   T >   LL  T
 +   T T  TTT  T
 +   TT TTT   LT
 +   TT        T
 +   TT  MT   TT
 +      LL   T
 +   TTT    T  T
 +    M      T
 +   TTTTTTTTTTT
 +</kara-world>
 +<kara-solution>
 +while not kara.mushroomFront():
 +    if (kara.treeLeft() or kara.treeRight()) and not kara.onLeaf():
 +        kara.putLeaf()
 +    if kara.treeFront():
 +        kara.turnRight()
 +    else:
 +        kara.move()
 +</kara-solution>
 +<kara-tests>
 +<kara-world>
 +   TTTTTTTTTTT
 +   T M TTT  TT
 +   T L LLLL LT
 +   T T  TTT LT
 +   TTLTTT   LT
 +   TTLLLL   LT
 +   TTL MT   TT
 +   TLL  LLL LT
 +   TTT    T LT
 +    M LLLLLT
 +   TTTTTTTTTTT
 +</kara-world>
 +</kara-tests>
 </kara-exercise> </kara-exercise>
  
  
  • gf_informatik/karatutorial/logik.1787918073.txt.gz
  • Zuletzt geändert: 2026-08-28 11:54
  • von hof