Lernpfad:Lerntheke Marsrover/17
Je komplexer ein Programm wird, desto wichtiger ist es, das Problem zunächst zu strukturieren. Dazu wird das Problem analysiert und in leichtere Teilprobleme aufgeteilt. Die Lösungen der Teilprobleme können dann zur Lösung des eigentlichen Problems kombiniert werden.
Das Aufteilen in elementare Teilprobleme nennt man auch strukturierte Zerlegung.
Ein Beispiel: Kochen in drei Schritten
Angenommen du möchtest dir ein Essen kochen: Spaghetti mit Tomatensauce und Salat.
Wenn in einem Kochbuch als Rezept steht "Koche Spaghetti mit Tomstensauce. Mache dann Salat", dann ist das als Anleitung wenig hilfreich. Statt dessen wird dort so etwas stehen wie "Koche die Spaghetti in etwa 1 Liter leicht gesalzenem Wasser bis sie bissfest sind. Für die Sauce fülle ..."
Jeder der drei Teile des Menüs wird eigens beschrieben und wiederum in kleinere Einzelschritte unterteilt. Man strukturiert das Problem "kochen" in kleinere Teilprobleme.
Dazu kann man schrittweise vorgehen:
Die Aufteilung hilft dabei, die Größe des Problems einzuschätzen, wiederkehrende Teilprobleme zu identifizieren oder auch Teile zu erkennen, die gleichzeitig durchgeführt werden können. (Zum Beispiel ist der Schritt "Wasser kochen" immer gleich und während die Nudeln kochen, kann schon der Salat zubereitet werden.)
Bezogen auf den Mars-Rover (oder allgemein auf die Entwicklung von Algorithmen) bietet sich ein strukturiertes Vorgehen an:
- Problem verstehen
- Versuche das Problem wirklich zu verstehen. Welche Sonderfälle gibt es? Visualisierungen und andere Darstellungsformen können dabei helfen.
- Teilprobleme erkennen
- Führe eine strukturierte Zerlegung durch und identifiziere Teilprobleme, die ggf. wiederverwendet werden können.
- Wahl der Mittel
- Welche Methoden gibt es schon, die verwendet werden können? Welche Programmkonstrukte kennst du und machen hier Sinn?
- Entwurf des Algorithmus
- Überlege dir den groben Ablauf des Algorithmus (bzw. der Teilprobleme) erstmal in einer vereinfachten Darstellung. Zum Beispiel als Pseudocode oder Programmablaufplan.
- Implementiere die Lösung
- Erst jetzt macht eine Implementierung Sinn.
- Teste deinen Algorithmus
- Welche Sonderfälle hast du dir überlegt? Teste so viel wie möglich.
Gehe die Schritte oben für das folgende Problem durch. Auch wenn du noch nicht so viele Programmierkonstrukte kennst, kannst du für den Entwurf umgangssprachliche Beschreibungen verwenden wie "Wenn ein Gestein vorhanden ist, dann ...".
Versuche möglichst sinnvolle Teilprobleme zu identifizieren und erstelle jeweils einen Programmablaufplan als Entwurf.
Eine Implementierung ist nicht notwendig, außer du fühlst dich mit Java schon sicher genug. In dem Fall findest du unten die Kartendaten.
Der Rover soll den Ausgang aus dem Labyrinth finden. Er weiß nicht, wie groß das Labyrinth ist. Das Labyrinth besteht aus parallelen Gängen, die sich bis zum Ausgang "schlängeln". Eine Marke markiert den Ausgang.
"...............\n......M........\n.....H.HHHHHHH.\n.....H.......H.\n...HHHHHHHHH.H.\n...H.........H.\n...H.HHHHHHHHH.\n...H......H....\n.HHHHHHHH.H....\n.H........H....\n.HHHHHHHHHH....\n..............."
Das ist Greenfoot | Der Mars-Rover | Die Welt des Mars-Rover | Das ist Java | Die Rover-Arena | Greenfoot benutzen | Java Syntax | Variablen | Methoden | Bedingte Anweisungen | Schleifen | Objekte | Arrays | Die Fähigkeiten des Rovers | Steine analysieren I | Steine analysieren II | Strukturiertes programmieren | Programme strukturieren I | Programme strukturieren II | Fallunterscheidungen I | Anfragen | Fallunterscheidungen II | Variablen | Objektvariablen | Wiederholungen I | Wiederholungen II | Rover-Liebe | Steine analysieren III | Gefangen im Labyrinth I | Marken-Maler | Fleißige Rover | Gefangen im Labyrinth II | In der Rover-Arena | Parameter