i

Übung - Algorithmen

Um strukturiert bei der Findung einer Lösung vorzugehen hilft es, das Problem zunächst zu vereinfachen und nur für diese (Teil-)Probleme ein Programm zu finden. Dieses Programm erweiterst du dann schrittweise, sodass es am Ende flexibel auf alle möglichen Asteroidenkombinationen reagieren kann.

Mission 1: Der Anfang muss nicht schwer sein

Ein erster Schritt könnte daher sein, zunächst alle Asteroiden zu entfernen und ein Programm zu schreiben, welches die Argo - unabhängig von ihrer Entfernung zum Power-up - immer bis zum Power-up fliegen lässt. Beachte, dass das Power-up noch nicht aufgehoben wird.

Wiederholungen

Mission 2: Einer reicht!

Im nächsten Schritt erhöhst du die Schwierigkeit ein wenig und platzierst genau einen Asteroiden etwa in die Mitte zwischen der Argo und dem Power-up. Ergänze dein Programm aus Mission 1, sodass es auch mit dieser Herausforderung zurecht kommt.

Wiederholungen

Mission 3: Erst testen, dann geht es weiter

Bevor du den nächsten Schritt gehst und weitere Asteroiden ergänzt, teste dein Programm zunächst weiterhin nur mit einem Asteroiden. Verändere dabei dessen Position. Achte vorallem darauf die unten gezeigten Sonderfälle. Funktioniert alles? Dann weiter zu Mission 4.

Wiederholungen Wiederholungen

Mission 4: Ein Asteroid kommt selten allein

Nachdem du ein einziges Programm geschrieben hast, das die Missionen 1 bis 3 erfüllen kann, ist es jetzt Zeit mehr Asteroiden einzufügen.

Um die Schwiergikeit aber nur schrittweise zu erhöhen achte darauf, dass du zunächst immer mindestens ein Sektor zwischen zwei Asteroiden frei lässt. Um den Sonderfall, dass zwei oder mehrere Asteroiden direkt nebeneinander liegen, kümmern wir uns in Mission 5.

Die nächsten Bilder zeigen dir verschiedene Möglichkeiten. Du kannst auch weitere testen, solange die Bedingungen (nicht zwei Asteroiden nebeneinander) eingehalten wird.

Wiederholungen Wiederholungen Wiederholungen

Funktioniert dein Programm auch mit zwei oder mehr Asteroiden? Dann kannst du direkt mit Mission 5 weitermachen. Falls dein Programm dies noch nicht erfüllt, verändere es solange, bis es alle vier vorangegangenen Missionen verarbeiten kann.

Mission 5: Asteroidenfeld

Jetzt wird es Zeit die letzte Schwierigkeit einzubauen: mindestens zwei Asteroiden liegen direkt nebeneinander. Achte auch hier wieder darauf, dein bisheriges Programm so zu erweitern, dass es die unten gezeigten Ausgangssituation verarbeiten kann.

Wiederholungen

Überlege dir daher zunächst, welche Anweisung in deinem Code mehrfach ausgeführt werden muss, damit die Argo unversehrt an einem längeren Asteroidenfeld entlang fliegen kann.

Aktiviere den Debugmodus. Dieser hilft dir dabei, leichter die Stelle zu finden, an der du dein bisheriges Programm anpassen musst.

Gut. Mit zwei nebeneinander liegenden Asteroiden wird dein Programm fertig. Teste es jetzt auch mit einer längeren Reihe von Asteroiden. Denke auch an den Sonderfall - alle Felder bis zum Power-up sind mit Asteroiden besetzt.

Mission 6: Alles oder (fast) nichts

Es ist soweit. Du hast in den letzten Missionen dein Programm schrittweise um weitere Funktionalitäten ergänzt und mit unterschiedlichen - wenn auch noch vereinfachten - Welten getestet. Nun musst du herausfinden, ob dein Programm auch mit der Kombination aus den verschiedenen Welten, inklusive der Sonderfälle, umgehen kann.

Vergiss nicht das Power-up aufzuheben. Auch wenn du es durch das Asteroidenfeld geschafft hast, ist der Energiemangel noch nicht behoben.
Wiederholungen

Test deine Lösung mit verschiedenen Welten, indem du:

  1. die Position der Asteroiden variierst (das Feld soll aber länglich bleiben).
  2. die Lücke zwischen den Asteroiden größer als einen Sektor machst.
  3. Asteroidenreihen mit einzelnen Asteroiden abwechselst.
  4. keinen Asteroid zwischen der Argo und dem Power-up platzierst.
  5. alle freien Sektoren zwischend der Argo und dem Power-up mit einem Asteroiden auslegst.

Missionsprotokoll: Das fertige Programm

Vergleiche dein fertiges Programm mit der Lösung unten. Klicke dich dazu durch die Bilderstrecke. Zu jeder Mission siehst du das entsprechende Programm. Neu hinzugekommene Anweisungen sind im Code mit dem Zeichen # gekennzeichnet.

Gruppieren
while not argo.onPow():   #
    argo.move()           #
      
Gruppieren Gruppieren
while not argo.onPow():
    if argo.rockFront():  #
        argo.turnLeft()   # 
        argo.move()       #
        argo.turnRight()  #
        argo.move()       #
        argo.move()       #
        argo.turnRight()  # 
        argo.move()       #
        argo.turnLeft()   #
    else:                 #
        argo.move()
      
Gruppieren
while not argo.onPow():
    if argo.rockFront():
        argo.turnLeft()
        argo.move()
        argo.turnRight()
        argo.move()
        while argo.rockRight(): #
            argo.move()
        argo.turnRight()
        argo.move()
        argo.turnLeft()
    else:
        argo.move()
argo.removePow()                #
      

Suche

v
6.4.4.2
inf-schule.de/imperative-programmierung/spacebug/algorithmen/uebungen
inf-schule.de/6.4.4.2
inf-schule.de/@/page/SRAH3IiVyoWDQ2la

Rückmeldung geben