Lernpfad:Lerntheke Marsrover/17

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
Strukturiertes programmieren

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:

Strukturierte Zerlegung Kochen.jpg

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.
Icon Heft.png
Arbeitsauftrag

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.

Rover Karte17 Labyrinth.jpg
Kartendaten:
"...............\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..............."
Lösung

Mögliche Zerlegung:

  • Fahre aus dem Labyrinth
    • Fahre geradeaus bis zum nächsten Hügel
    • Positioniere dich linksrum zum nächsten Gang
    • Fahre geradeaus bis zum nächsten Hügel
    • Positioniere dich rechtsrum zum nächsten Gang
    • ...

Mögliche Programmablaufpläne zu den Teilproblemen:

PAP Karte17 Teilproblem0.png
PAP Karte17 Teilproblem1.png
PAP Karte17 Teilproblem2.png
PAP Karte17 Teilproblem3.png