s n h m r u
i

Erkundung

Das Problem: PowerUps aufräumen

Die Missionszentrale: "Einige unserer anderen Piloten haben auf Ihren Missionen ein ziemliches Chaos mit ihren PowerUps angerichtet und sie überall herumfliegen lassen. Die Argo soll sie aufsammeln und zunächst geordnet am Ende eines Korridors ablegen. Wie bisher sollen verschiedene Szenarien möglich sein."

welt_vorher pfeil welt_nachher

Die Schwierigkeit besteht hier darin, dass die Argo die eingesammelten PowerUps zählen muss und sich die Anzahl merken muss, bevor sie die PowerUps wieder ablegen kann.

Ein Programm für den ersten Teil der Mission

Für den ersten Teil der Mission gibt es schon ein Programm. Darin kommt etwas Neues vor: eine Variable mit dem Namen zaehler. Was es damit auf sich hat, findest du in den folgenden Aufgaben heraus.

zaehler = 0
while not rockFront():
    move()
    if onPow():
        zaehler = zaehler + 1
        removePow()

Aufgabe 1: Was wird die Argo tun?

Führe das Programm noch nicht aus! Du findest es unten im Programmfenster, zusammen mit zwei Welten. Zwischen den Welten wechselst du mit den beiden Punkten unter der Weltraumansicht.

Lies das Programm Zeile für Zeile und sag für beide Welten voraus: In welchem Sektor steht die Argo am Ende? Welchen Wert hat zaehler am Ende? Du kennst noch nicht alles, was in diesem Programm vorkommt – stelle trotzdem eine Vermutung auf. Halte deine Vorhersagen in einer Tabelle fest.

Welt Vorhersage: Wo steht die Argo am Ende? Vorhersage: Welchen Wert hat zaehler am Ende? Beobachtung
1: kurzer Korridor ... ... ...
2: langer Korridor ... ... ...

Aufgabe 2: Die Probe

Jetzt darfst du das Programm ausführen. Damit du dabei auch siehst, was mit zaehler geschieht, brauchst du die Variablenanzeige und den Debug-Modus.

Burger-Icon Konsolen-Icon

Wenn du auf die 3 Striche im Programmfenster klickst (das Burger-Icon), dann kannst du die Variablenanzeige öffnen. Dort werden dir im Debug-Modus die aktuellen Werte deiner Variablen angezeigt.

Im Debug-Modus führt die Argo mit jedem Klick auf den Start-Button genau eine Zeile aus. Die farbig markierte Zeile ist die, die als nächste ausgeführt wird. Verdeckt die Variablenanzeige einen Teil des Programms, dann klicke auf den kleinen Balken am unteren Rand des Programmfensters: Es wird größer.

  1. Öffne die Variablenanzeige und aktiviere den Debug-Modus mit dem Debug-Button-Button.
  2. Führe das Programm in beiden Welten Schritt für Schritt aus. Beobachte dabei die Argo, die markierte Zeile und die Variablenanzeige.
  3. Trage deine Beobachtungen in die Tabelle aus Aufgabe 1 ein und vergleiche sie mit deinen Vorhersagen. Wo lagst du richtig? Was hat dich überrascht?

Aufgabe 3: Genau hingeschaut

Untersuche das Programm jetzt genauer. Du kannst es dazu beliebig oft ausführen. Setze die Welt vor jedem neuen Start mit dem Reset-Button-Button zurück.

Wenn du ein Programm geändert hast, dann starte es zuerst einmal ohne Debug-Modus. Direkt nach einer Änderung kann es sonst passieren, dass der Debug-Modus noch das alte Programm ausführt.

(a) Was bewirken die Anweisungen zaehler = 0 in Zeile 1 und zaehler = zaehler + 1 in Zeile 5? Beschreibe es mit eigenen Worten.

(b) Was passiert, wenn Zeile 1 fehlt? Notiere zuerst deine Vermutung. Lösche dann Zeile 1 und starte das Programm – diesmal ohne Debug-Modus. Erkläre, was du beobachtest. Füge die Zeile anschließend wieder ein.

(c) Beschreibe den Algorithmus, den die Argo hier ausführt, in eigenen Worten. Welche Rolle spielt zaehler dabei?

Tipp zu (c)

Du kannst so anfangen: „Zu Beginn … Solange vor der Argo kein Asteroid ist, … Wenn die Argo auf einem PowerUp steht, …“

Aufgabe 4: Die Mission zu Ende bringen

Die PowerUps sind eingesammelt und gezählt – abgelegt sind sie aber noch nicht. Im Programmfenster unten steht wieder das Programm von oben, diesmal mit vier Welten.

(a) Ergänze das Programm so, dass die Argo am Ende genau so viele PowerUps ablegt, wie sie eingesammelt hat: ohne Lücken und beginnend im Sektor direkt vor dem Asteroiden, so wie im Bild ganz oben. Teste dein Programm in allen vier Welten.

Tipp 1

Am Ende des Korridors muss sich die Argo umdrehen. Danach legt sie ein PowerUp ab, fliegt einen Sektor weiter, legt wieder eines ab … Wie oft? Das steht in zaehler.

Tipp 2

Auch mit zaehler kann man eine Bedingung formulieren, zum Beispiel zaehler > 0 („der Wert von zaehler ist größer als 0“). Überlege, was du nach jedem abgelegten PowerUp mit zaehler tun musst, damit diese Bedingung irgendwann nicht mehr erfüllt ist.

(b) (optional) Die Argo soll jetzt alle PowerUps im Korridor einsammeln und anschließend die doppelte Anzahl von PowerUps ablegen. Wie kann man dieses Problem lösen? Kannst du auch verschiedene Algorithmen zur Lösung des Problems angeben?

Aufgabe 5: Eine neue Mission

Die Missionszentrale: "An der linken Seite einer Flugroute treiben Asteroiden. Ein Raumschiff soll sie später beseitigen und braucht dafür für jeden dieser Asteroiden ein PowerUp. Fliegen Sie die Route ab, bis ein Asteroid den Weg versperrt, und zählen Sie dabei die Asteroiden an der linken Seite. Legen Sie auf dem Rückweg genau so viele PowerUps bereit – ohne Lücken und beginnend im Sektor direkt vor dem Asteroiden, der den Weg versperrt."

welt_vorher pfeil welt_nachher

Gezählt werden nur die Asteroiden, die in Flugrichtung gesehen direkt links neben der Route liegen. Asteroiden auf der rechten Seite zählen nicht mit. Links neben dem Startsektor der Argo liegt nie ein Asteroid.

(a) Schreibe ein Programm, das diese Mission löst. Überlege vorher, was du aus dem Programm von oben übernehmen kannst und was du ändern musst.

(b) Teste dein Programm in allen vier Welten. Prüfe mit der Variablenanzeige im Debug-Modus, ob die Argo richtig zählt.

(c) (optional) Erweitere dein Programm so, dass die Argo am Ende wieder auf ihrem Startsektor steht und in die ursprüngliche Richtung schaut. Die PowerUps sollen genauso liegen wie vorher.

Tipp zu (c)

Am Startsektor gibt es nichts, was die Sensoren der Argo erkennen könnten. Die Argo kann sich aber merken, wie viele Sektoren sie auf dem Hinweg geflogen ist. Dafür brauchst du eine zweite Variable.

Suche

v
6.1.5.1 Erkundung
Kopieren durch Anklicken

Rückmeldung geben