Erkundung
Ein ganzes Asteroidenfeld füllen
Neue Anweisungen der Missionszentrale: Gute Arbeit bisher! Nutzen Sie nun ihre bisherigen Erfahrungen, um nicht nur die Lücken in einem Asteroidenkorridor, sondern in einem ganzen Asteroidenfeld zu füllen! Ihr Programm sollte natürlich wieder für Asteroidenfelder aller Größen funktionieren.
Aufgabe 1: Kleine Anpassungen
Diese Aufgabe kann etwas erschlagend wirken, mach dir daher zunächst bewusst, dass wir in den letzten Kapiteln schon viel Vorarbeit hierfür geleistet haben. Hier siehst du ein mögliches Asteroidenfeld und im Programmierfenster eine mögliche Lösung aus dem letzten Kapitel:
- Führe das Programm mit den verschiedenen Startpositionen aus. Was funktioniert schon gut? Wo müssen wir noch nachbessern?
- Bringe die Abschnitte des Algorithmus, mit dem eine Seite des Feldes korrekt gefüllt wird, in die richtige Reihenfolge (links wird vor rechts gefüllt):
- Beschreibe, wie man mit diesem Algorithmus das eigentliche Problem lösen kann.
Aufgabe 2: Neue Befehle für die Argo
Wie du im Algorithmus gesehen hast, muss die Argo dreimal den gleichen Vorgang "Lücke links füllen, falls vorhanden" ausführen. Wir können der Argo das als neuen Befehl beibringen:
- Führe das Programm aus. Überlege dir, worin der Unterschied zwischen den Zeilen 2 und 11 besteht. Du kannst dafür Zeile 11 auch löschen und das Programm ausführen. Was beobachtest du?
- Vervollständige den neuen Befehl
linksFuellenFallsNoetig
. - Ergänze um einen neuen Befehl
rechtsFuellenFallsNoetig
. Orientiere dich am Programm aus Aufgabe 1. - Vervollständige das Hauptprogramm, sodass der Algorithmus für das Füllen einer Seite korrekt ausgeführt wird. Denke daran, dein Programm abzuspeichern, um es in Aufgabe 3 nochmal zu verwenden!
- Die Namen der neuen Befehle sehen befremdlich aus - natürlicher wäre wohl der Name
linksFüllenFallsNötig
. Hast du eine Vermutung, warum dieser Name nicht gewählt wurde? Du kannst dafür auch probieren, den Namen des Befehls entsprechend zu ändern und das Programm auszuführen.
Aufgabe 3: Die Lösung des Problems
Nun lösen wir das Hauptproblem und füllen das gesamte Asteroidenfeld mit einem Programm. Dafür hast du hier ein Grundgerüst:
- Begründe, warum es sinnvoll ist, der Argo den neuen Befehl
lueckenBisAsteroidFuellen
beizubringen - Ergänze das Grundgerüst um die drei Unterprogramme (neue Befehle)
lueckenBisAsteroidFuellen
,linksFuellenFallsNoetig
undrechtsFuellenFallsNoetig
, indem du deine Ergebnisse aus Aufgabe 2 wiederverwendest. Teste dein Programm mit den gegebenen Szenarien.
(optional) Aufgabe 4: ... oder doch nicht?
Unsere Lösung aus Aufgabe 3 hat einige Annahmen über das Asteroidenfeld gemacht, deren wir uns bewusst werden sollten:
- Begründe, dass alle hier gesetzten Asteroiden nötig sind, damit unser Programm keinen Fehler verursacht. Du kannst in dieser Aufgabe Asteroiden aus der Welt löschen, indem du sie anklickst.
- Begründe, dass ohne die hier markierten Asteroiden kein Programm geschrieben werden kann, das die vorgeschriebene Aufgabe löst.
- Passe dein Programm so an, dass auch Szenarien ohne die anderen Blöcke gelöst werden können.