1 / 63

Algorithmisches Problemlösen mit Kara

Algorithmisches Problemlösen mit Kara. Klaus Becker 2012. Algorithmisches Problemlösen / Kara. Teil 1. Die Kara-Welt. Kara and ihre/seine Welt.

kele
Download Presentation

Algorithmisches Problemlösen mit Kara

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algorithmisches Problemlösenmit Kara Klaus Becker 2012

  2. Algorithmisches Problemlösen / Kara

  3. Teil 1 Die Kara-Welt

  4. Kara and ihre/seine Welt Kara ist ein Marienkäfer. Kara lebt in einer Welt - mit unbewegliche Baumstümpfen, - mit Pilzen (die Kara verschieben kann) und - mit Kleeblättern (die Kara hinlegen und aufnehmen kann). Kara kann bestimmte Befehle ausführen. Kara kann die Umgebung wahrnehmen.

  5. Steuerung von Kara Aufgabe: Kara steht hier vor einem Baumstumpf. Kara soll jetzt einmal um den Baum laufen und den Weg mit Kleeblättern auslegen. Benutze die Schaltflächen im Kara-Weltfenster, um diese Aufgabe zu erledigen. Wenn die Arbeit getan ist, soll die Karawelt so aussehen: Karawelt - vorher Karawelt - nachher

  6. Steuerung von Kara Aufgabe: Stelle nochmal die Ausgangssituation her. Klicke jetzt auf die Schaltfläche [Programmieren]. Es öffnet sich ein neues Fenster, in das man Anweisungen zur Steuerung von Kara schreiben kann. In der folgenden Abbildung sind erste Anweisungen zur Lösung der oben gestellten Aufgabe bereits eingetragen. Programmfenster Weltfenster

  7. Anweisung Die Steuerung von Kara erfolgt mit Hilfe von Anweisungen. Anweisungen, die mit Hilfe der vom Ausführsystem direkt zur Verfügung gestellten Grundoperationen gebildet werden, nennt man auch elementare Anweisungen. Operation Bedeutung move() einen Schritt weiter gehenturnLeft() sich um 90° nach links drehen turnRight() sich um 90° nach rechts drehenputLeaf() Kleeblatt auf das aktuelle Feld legenremoveLeaf() Kleeblatt vom aktuellen Feld entfernen kara.move() elementare Anweisung

  8. Anweisungssequenzen Eine Anweisungssequenz ist eine Folge von Anweisungen, die vom Ausführsystem der Reihe nach ausgeführt werden. kara.turnLeft() kara.putLeaf() kara.move() kara.putLeaf() kara.turnRight() kara.move() kara.putLeaf() kara.move() kara.putLeaf() kara.turnRight() kara.move() kara.putLeaf() kara.move() kara.putLeaf() kara.turnRight() kara.move() kara.putLeaf() kara.move() kara.putLeaf() kara.turnRight() kara.move() kara.putLeaf() kara.turnLeft() Anweisungssequenz

  9. Teil 2 Fallunterscheidungen

  10. Problem - Blatt aus dem Bau tragen Problem: Kara steht vor ihrem/seinem Bau und möchte das Kleeblatt, das sich irgendwo im Bau befindet, nach draußen befördern. Karawelt - vorher Fall 1 Karawelt - vorher Fall 2 Karawelt - vorher Fall 3 Karawelt - nachher

  11. Problem - Blatt aus dem Bau tragen Aufgabe: Ergänze jeweils die fehlenden Teile. Achte auf die Einrückungen, um die verschiedenen Fälle deutlich zu unterscheiden. Python-Programm Lösungsverfahren Schritt weitergehen WENN auf einem Kleeblatt: Kleeblatt aufheben rechts drehen rechts drehen Schritt weitergehen SONST: Schritt weitergehen WENN auf einem Kleeblatt: ... SONST: ... Kleeblatt hinlegen kara.move() if kara.onLeaf(): kara.removeLeaf() ... else: kara.move() if kara.onLeaf(): kara.removeLeaf() ... else: kara.move() ... kara.putLeaf()

  12. Problem - Blatt aus dem Bau tragen Aufgabe: Leistet das folgende Lösungsverfahren auch das Gewünschte? Überprüfe das zunächst, indem du es selbst (z.B. auf dem Papier) durchspielst. Übersetze das Lösungsverfahren anschließend in die Programmiersprache Python und teste das entsprechende Python-Programm. Schritt weitergehen WENN auf einem Kleeblatt: Kleeblatt aufheben rechts drehen rechts drehen SONST: Schritt weitergehen WENN auf einem Kleeblatt: Kleeblatt aufheben rechts drehen rechts drehen SONST Schritt weitergehen Kleeblatt aufheben rechts drehen rechts drehen Schritt weitergehen Schritt weitergehen Schritt weitergehen Kleeblatt hinlegen Lösungsverfahren

  13. Bedingung Die Steuerung komplexerer Abläufe (wie Fallunterscheidungen und Wiederholungen) erfolgt mit Hilfe von Bedingungen. Die einfachsten Bedingungen, die mit Hilfe der Grandoperationen des Ausführsystems gebildet werden, nennt man auch elementare Bedingungen. Komplexere Bedingungen lassen sich mit Hilfe der logischen Operatoren not, and and or aufbauen. Operation Bedeutung treeFront() Baum vorne?treeLeft() Baum links?treeRight() Baum rechts?mushroomFront() vor einem Pilz?onLeaf() auf einem Kleeblatt? elementare Bedingung kara.treeFront() True / False komplexe Bedingung mit logischem Operator not kara.treeFront() True / False

  14. Fallunterscheidung Eine Fallunterscheidung dient dazu, alternative Abläufe zu beschreiben. WENN [Bedingung]: [Anweisungssequenz] SONST: [Anweisungssequenz] WENN [Bedingung]: [Anweisungssequenz] zweiseitige Fallunterscheidung einseitige Fallunterscheidung

  15. Fallunterscheidung Eine Fallunterscheidung dient dazu, alternative Abläufe zu beschreiben. WENN [Bedingung]: [Anweisungssequenz] SONST: [Anweisungssequenz] WENN [Bedingung]: [Anweisungssequenz] zweiseitige Fallunterscheidung einseitige Fallunterscheidung Doppelpunkt Schlüsselwort if [Bedingung]: [Anweisungssequenz] else: [Anweisungssequenz] if [Bedingung]: [Anweisungssequenz] Einrückung if kara.treeFront(): kara.turnLeft() else: kara.move() if kara.onLeaf(): kara.removeLeaf() kara.move()

  16. Übungen Aufgabe: (a) Kara weiß nicht, ob und wie viele Kleeblätter sich in ihrem/seinem Bau befinden. Kara möchte sie alle einsammeln. (b) Kara möchte den Bau mit Kleeblättern auslegen. Es können sich aber schon Kleeblätter in einigen Feldern des Baus befinden.

  17. Teil 3 Wiederholungen

  18. Problem - um eine Baumreihe laufen Problem: Kara steht vor einer Baumreihe, weiß jedoch not, wie lang sie ist. Kara möchte um die Baumreihe laufen und den Weg mit Blättern auslegen. Karawelt - vorher Karawelt - nachher

  19. Problem - um eine Baumreihe laufen Aufgabe: Kannst du die Lösung vervollständigen. Welche Aktionen müssen wiederholt durchgeführt werden? Welche Aktionen müssen vor der SOLANGE-Anweisung erfolgen, welche danach? Versuche, das Lösungsverfahren in Python zu beschreiben. Beachte, dass man die zu wiederholenden Anweisungen (um 4 Einheiten) einrücken muss. Teste das Programm anschließend mit unterschiedlich langen Baumreihen. Python-Programm Lösungsverfahren ... SOLANGE ein Baumstumpf rechts steht: ... ... ... while kara.treeRight(): ... ...

  20. Problem - um eine Baumreihe laufen Aufgabe: Kara soll jetzt einmal ganz um eine Baumreihe laufen und den Weg mit Kleeblättern auslegen.

  21. Wiederholung Eine Wiederholung dient dazu, wiederholte Abläufe zu beschreiben. SOLANGE [Bedingung]: [Anweisungssequenz] Wiederholung mit Eintrittsbedingung Bei der Ausführung einer SOLANGE-Anweisung wird vor jedem Wiederholungsdurchgang überprüft, ob die Bedingung erfüllt ist. Ist das der Fall, so werden die Anweisungen der Anweisungssequenz ausgeführt und der nächste Wiederholungsdurchgang kann beginnen. Andernfalls wird die Ausführung der Wiederholungsanweisung beendet. Flussdiagramm / Programmablaufplan

  22. Wiederholung Eine Wiederholung dient dazu, wiederholte Abläufe zu beschreiben. SOLANGE [Bedingung]: [Anweisungssequenz] Wiederholung mit Eintrittsbedingung Python-Syntax Schlüsselwort Doppelpunkt while [Bedingung]: [Anweisungssequenz] Einrückung while kara.treeRight(): kara.putLeaf() kara.move()

  23. Schleifendurchläufe while not kara.treeFront(): kara.putLeaf() kara.move() kein Schleifendurchlauf Endlosschleife: unendlich viele Schleifendurchläufe Ist die Bedingung gleich zu Beginn nicht erfüllt, so wird die Schleife überhaupt nicht durchlaufen. Die Wiederholungsanweisung bewirkt dann gar nichts. Ist die Bedingung vor jedem Schleifendurchlauf erfüllt, so wird die Schleife (theoretisch) unendlich oft durchlaufen. Man spricht dann auch von einer Endlosschleife. In der Praxis muss man in einem solchen Fall die Ausführung abbrechen.

  24. Übungen Aufgabe: (a) Was leistet dieses Programm? Teste es mit geeigneten Kara-Welten. (b) Überlege dir, wie die Kara-Welt jeweils beschaffen sein muss, damit einer der folgenden Sonderfälle eintritt: Die Schleife wird überhaupt nicht durchlaufen. Kara gerät in eine Endlosschleife. while not kara.treeFront(): kara.move() Aufgabe: Worin besteht der Unterschied zwischen den folgenden Programmen? Verdeutliche den Unterschied anhand konkreter Situationen. while not kara.treeFront(): kara.move() kara.putLeaf() while not kara.treeFront(): kara.move() kara.putLeaf()

  25. Übungen Aufgabe: Kara steht im Eingang ihres/seines rechteckigen Baus. Kara soll in die hintere Ecke des Baus (siehe Abbildung) laufen. Beachte, dass der Kara-Bau verschiedene ausmaße haben kann.

  26. Übungen Aufgabe: Kara soll einmal um ihren/seinen Bau laufen und den Weg mit Kleeblättern auslegen. Aber Achtung, der rechteckige Kara-Bau kann ganz unterschiedliche Ausmaße haben. Die Beispiele zeigen zwei Möglichkeiten.

  27. Teil 4 Algorithmen

  28. Problem - Kleeblatt suchen Problem: Kara ist auf der Suche nach einem Kleeblatt. Kara soll hierzu geradeaus weiterlaufen, bis sie/er ein Kleeblatt gefanden hat. Aber, es befinden sich manchmal Baumstümpfe im Weg. Kara muss diese Hindernisse dann umlaufen. Karawelt - vorher Karawelt - nachher Aufgabe: Entwickle zunächst ein Verfahren zur Lösung des Problems. Beschreibe das Verfahren in Worten. Entwickle dann erst das zugehörige Programm.

  29. Problembeschreibung Die zu bearbeitenden Probleme sind oft allgemein in dem Sinne, dass viele konkrete Problemsituationen möglich sind. Im dargestellten Beispiel sind viele verschiedene Anordnungen von Baumreihen und von zu suchendem Kleeblatt denkbar. Häufig deuten wir den allgemeinen Charakter eines Problems dadurch an, dass wir mehrere unterschiedliche Problemsituationen wiedergeben. Karawelt - vorher Karawelt - nachher Vor jeder Problembearbeitung sollte das zu lösende Problem möglichst klar beschrieben werden. Wir benutzen hier ein Verfahren zur Problembeschreibung, das in vielen Bereichen der Informatik angewandt wird. Wir beschreiben ein Problem mit Hilfe der Zustände, die das betrachtete System (hier: Kara and ihre/seine Welt) vor und nach der Problembearbeitung einnehmen soll.

  30. Algorithmus Ein Algorithmus ist eine Verarbeitungsvorschrift zur Lösung eines Problems, die so präzise formuliert ist, dass sie (zumindest im Prinzip) auch von einer Maschine abgearbeitet werden kann. SOLANGE nicht auf einem Kleeblatt: WENN vor einem Baum: links drehen Schritt weitergehen rechts drehen Schritt weitergehen SOLANGE rechts ein Baum: Schritt weitergehen rechts drehen Schritt weitergehen links drehen SONST: Schritt weitergehen Kleeblatt aufheben Karawelt - vorher Karawelt - nachher Algorithmus

  31. Programm Ein Programm ist ein Algorithmus zur Lösung eines Problems, der in einer vorgegebenen Programmiersprache verfasst ist. while not kara.onLeaf(): if kara.treeFront(): kara.turnLeft() kara.move() kara.turnRight() kara.move() while kara.treeRight(): kara.move() kara.turnRight() kara.move() kara.turnLeft() else: kara.move() kara.removeLeaf() SOLANGE nicht auf einem Kleeblatt: WENN vor einem Baum: links drehen Schritt weitergehen rechts drehen Schritt weitergehen SOLANGE rechts ein Baum: Schritt weitergehen rechts drehen Schritt weitergehen links drehen SONST: Schritt weitergehen Kleeblatt aufheben Algorithmus Programm

  32. Bausteine von Algorithmen Dieser Algorithmus ist aus zahlreichen elementaren Anweisungen, einer Entscheidungsanweisung sowie zwei Wiederholungsanweisungen aufgebaut. Besonders deutlich werden die Bausteine, wenn man Algorithmen mit einer Bildsprache - den sogenannten Struktogrammen - beschreibt. Algorithmus Struktogramme

  33. Algorithmisches Problemlösen Problembeschreiben Kleeblatt suchen: SOLANGE man nicht auf einem Kleeblatt steht, macht man Folgendes: WENN man vor einem Baum steht, dann muss man den Baum / die Baumreihe umlaufen SONST kann man einen Schritt weitergehen. Zuletzt muss man das Kleeblatt aufheben Ideensuchen and informell beschreiben Algorithmus präzisieren (z.B. mit Struktogrammen) while not kara.onLeaf(): if kara.treeFront(): kara.turnLeft() kara.move() kara.turnRight() kara.move() while kara.treeRight(): kara.move() kara.turnRight() kara.move() kara.turnLeft() else: kara.move() kara.removeLeaf() Algorithmus in ein Programm übersetzen Programmtesten

  34. Übungen Aufgabe 1: Einen Algorithmus in Struktogrammform beschreiben (einfach) Kara soll einmal um einen Baum laufen. Beachte, dass Kara danach in derselben Position am Baum steht. Aufgabe 2: Einen Algorithmus in Struktogrammform beschreiben (schwierig) Kara merkt sich die Uhrzeit mit einem Pilz, der schrittweise um einen Baum geschoben wird. Kara soll hier den Pilz - egal, wo er sich zunächst befindet - um einen Schritt weiterverschieben.

  35. Jeder macht Fehler Fehler bei der Ideensuche Häufig kommt es bereits bei der Ideensuche zu Fehlern. Man glaubt, die entscheidende Idee gefanden zu haben, hat aber etwas Wichtiges übersehen. Problembeschreiben Ideensuchen and informell beschreiben Kleeblatt suchen: SOLANGE nicht auf einem Kleeblatt, mache Folgendes: WENN vor einem Baum, dann den Baum / die Baumreihe umlaufen anschließend einen Schritt weitergehen das Kleeblatt aufheben Algorithmus präzisieren (z.B. mit Struktogrammen) Algorithmus in ein Programm übersetzen Programmtesten

  36. Jeder macht Fehler Fehler bei der Ablaufmodellierung Bei der Ablaufmodellierung kann es vorkommen, dass man die Bausteine zur Beschreibung des Ablaufs nicht korrekt zusammenzusetzt. Problembeschreiben Ideensuchen and informell beschreiben Algorithmus präzisieren (z.B. mit Struktogrammen) Algorithmus in ein Programm übersetzen Programmtesten

  37. Jeder macht Fehler Fehler bei der Implementierung Bei der Übersetzung eines korrekten Algorithmus in ein lauffähiges Programm kann es zu weiteren Fehlern kommen. So kann man z.B. den Doppelpunkt in der if-Anweisung vergessen, oder eine Anweisung nicht richtig einrücken. Problembeschreiben Ideensuchen and informell beschreiben while not kara.onLeaf(): if kara.treeFront() kara.turnLeft() kara.move() kara.turnRight() kara.move() while kara.treeRight(): kara.move() kara.turnRight() kara.move() kara.turnLeft() else: kara.move() kara.removeLeaf() Algorithmus präzisieren (z.B. mit Struktogrammen) Algorithmus in ein Programm übersetzen Programmtesten

  38. Übungen Aufgabe 3: Fehler suchen Kara soll die Kleeblätter, die als Recht-eck ausgelegt sind, alle einsammeln. T. hat das folgende Programm zur Lösung des Problems entwickelt. while kara.onLeaf(): kara.removeleaf() kara.move() kara.turnRight() while kara.onLeaf(): kara.removeleaf() kara.move() kara.turnRight() while kara.onLeaf(): kara.removeleaf() kara.move() kara.turnRight() while kara.onLeaf(): kara.removeleaf() kara.move() kara.turnRight() (a) Teste erst einmal das Programm. Es erscheint direkt eine Fehlermeldung. Welchen syntaktischen Fehler hat T. gemacht? (b) Korrigiere den Fehler und teste erneut das Programm. Es leistet noch nicht das Gewünschte. Irgend etwas stimmt mit den Einrückungen noch nicht. Kannst du diesen Fehler auch noch beheben? (c) Wenn du den Einrückfehler verbessert hast, dann leistet das Programm immer noch nicht das Gewünschte. Der Algorithmus, der dem Programm zu Grunde liegt, ist noch nicht in Ordnung. Kannst du das auch noch korrigieren? (d) Wenn du ein korrekt arbeitendes Programm hast, dann stelle den zu Grunde liegenden Algorithmus in Struktogrammform dar.

  39. Teil 5 Logische Operatoren

  40. Problem - Kleeblatt suchen Problem: Kara befindet sich in einem Baumlabyrinth und möchte zum Ausgang laufen. Hier liegt (zur Belohnung) ein Kleeblatt. Wie kann man systematisch aus einem Labyrinth herauslaufen? Die folgenden Aufgaben weisen dir einen Weg zur Lösung des Labyrinth-Problems. Du kannst natürlich auch versuchen, das Problem selbstständig zu lösen. Karawelt - vorher Karawelt - nachher

  41. Linke-Hand-Strategie Aufgabe: Kennst du die Linke-Hand-Strategie (Rechte-Hand-Strategie): Man läuft so weiter, dass die linke (rechte) Hand immer die Labyrinthbegrenzung berührt. (a) Probiere die Linke-Hand-Strategie selbst einmal aus. (b) Welchen Weg würde Kara in den drei oben gezeigten Labyrinthen laufen, wenn sie/er die Linke-Hand-Strategie systematisch anwendet? Karawelt - vorher Karawelt - nachher Aufgabe: Wie soll Kara sich nach der Linken-Hand-Strategie verhalten, wenn eine der folgenden Situationen vorliegt: Situation 1: links ein kein Baum Situation 2: links ist ein Baum und Kara steht nicht vor einem Baum Situation 3: links ist ein Baum und Kara steht vor einem Baum

  42. Verhaltensbeschreibung Aufgabe: Wir beschreiben den Algorithmus zur Linken-Hand-Strategie mit einem Struktogramm. Gehe nach den Situationsbeschreibungen oben vor und ergänze die fehlenden Bedingungen. Übersetze den Algorithmus in die Programmiersprache Python. Hier auch eine Auswahl an Vorschlägen zur Übersetzung der Bedingungen. Die richtigen Übersetzungen sind auch dabei. kara.onLeaf() not kara.onLeaf() not kara.treeLeft() kara.treeLeft() not kara.treeLeft() and not kara.treeFront() kara.treeLeft() and kara.treeFront() kara.treeLeft() and not kara.treeFront() kara.treeLeft() or kara.treeFront()

  43. Wahrheitswerte / logische Operatoren Zur Beschreibung von Werten von Bedingungen benutzt man die Wahrheitswerte wahr and falsch bzw. True and False. Logische Operatoren werden benötigt, um Bedingungen zusammenzusetzen. SOLANGE nicht (links ein Baum und rechts ein Baum): Schritt weitergehen a not a False True True False a b a and b False False False False True False True False False True True True a b a or b False False False False True True True False True True True True nicht Negation Konjunktion und Disjunktion oder

  44. Übungen Aufgabe: Kara befindet sich irgendwo in ihrem/seinem rechteckigen Bau. Kara will zum Ausgang des Baus laufen. (a) Welche Bedingung ist erfüllt, wenn Kara im Ausgang des Baus steht? (b) Wie kann Kara diesem Ausgang finden? Tipp: Erst einmal geradeaus laufen, bis ..., dann evtl. mit der Linken-Hand-Strategie den Ausgang suchen. (c) Entwickle eine Lösung in Struktogrammform und übersetze sie dann in die Programmiersprache Python. Teste das Programm mit verschiedenen Ausgangssituationen..

  45. Teil 6 Problemzerlegung

  46. Problem - Fußballfeld auslegen Problem: Kara will ein Fußballfeld mit Kleeblättern auslegen. Die Eckpfosten stehen schon. Karawelt - vorher Karawelt - nachher Das Problem ist recht komplex. In solch einer Situation ist es meist günstig, das Problem in geeignete Teilprobleme zu zerlegen.

  47. Teilprobleme - Fußballfeld auslegen Teilproblem: "zur Ausgangsposition laufen" Teilproblem: "Kleeblattreihe bis zum nächsten Baum legen" Teilproblem: "um einen Pfosten laufen" Aufgabe: Welche weiteren Teilprobleme kann man festlegen, wenn das Innere des Spielfelds mit Kleeblättern ausgelegt werden soll?

  48. Teillösungen zusammensetzen Aufgabe: (a) Wo befindet sich Kara nach der Ausführung des gezeigten Algorithmus? (a) Wie kann man ihn fortsetzen, so dass auch das Spielfeldinnere mit Kleeblättern ausgelegt wird? Algorithmus FussballfeldAuslegen: zur Ausgangsposition laufen Kleeblattreihe bis zum nächsten Baum legen um einen Pfosten laufen Kleeblattreihe bis zum nächsten Baum legen um einen Pfosten laufen Kleeblattreihe bis zum nächsten Baum legen um einen Pfosten laufen Kleeblattreihe bis zum nächsten Baum legen um einen Pfosten laufen ...

  49. Teillösungen zusammensetzen # Unterprogramme def zurAusgangpositionLaufen(): kara.move() kara.turnRight() kara.move() kara.turnLeft() def kleeblattreiheBisBaumLegen(): while not kara.treeFront(): kara.putLeaf() kara.move() kara.putLeaf() def umPfostenLaufen(): kara.turnRight() kara.move() kara.turnLeft() kara.move() kara.turnRight() ... ... # Hauptprogramm zurAusgangpositionLaufen() kleeblattreiheBisBaumLegen() umPfostenLaufen() kleeblattreiheBisBaumLegen() umPfostenLaufen() kleeblattreiheBisBaumLegen() umPfostenLaufen() kleeblattreiheBisBaumLegen() umPfostenLaufen() Aufgabe: (a) Schaue dir das Programm zunächst genau an. Kannst du den Aufbau erklären? Teste anschließend das Programm. (b) Versuche, das Programm um weitere Unterprogramme so zu ergänzen, dass auch das Spielfeldinnere mit geeigneten neuen Befehlen ausgelegt werden kann.

  50. Teile and herrsche Teile and herrsche ist eine Problemlösestrategie, bei der ein Problem immer weiter in Teilprobleme zerlegt wird, bis sich diese einfach lösen lassen. Aus den Lösungen der Teilprobleme wird dann die Lösung des Gesamtproblems zusammengesetzt. Algorithmus FussballfeldAuslegen: zur Ausgangsposition laufen Kleeblattreihe bis zum nächsten Baum legen um einen Pfosten laufen Kleeblattreihe bis zum nächsten Baum legen um einen Pfosten laufen Kleeblattreihe bis zum nächsten Baum legen um einen Pfosten laufen Kleeblattreihe bis zum nächsten Baum legen um einen Pfosten laufen ...

More Related