Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
144 KAPITEL 12. PROGRAMMENTWURF<br />
immer mit der Wand in Beruhrung bleiben, darf also nicht in eine Situation gelangen, in der<br />
" Absturzgefahr\ droht.<br />
In Abbildung 12.1 sind also die Teile (a) und (b) sowohl am Anfang, zwischendurch und am Ende<br />
korrekt. Die Ausgangslandschaft (c) ist nicht korrekt (Hamster schaut nicht nach Westen; der<br />
Berg ist nicht regelma ig). Der in Teil (d) skizzierte Snapshot von unterwegs ist nicht zulassig<br />
(es droht Absturzgefahr\), ebenso ist in Teil (e) eine unzulassige Endsituation skizziert (auf<br />
"<br />
einer Aufwartsstufe des Berges liegt kein Korn, dafur aber auf einer Abwartsstufe).<br />
12.3 Entwurf<br />
Wie bereits in Abschnitt 12.1 erwahnt, basiert der Entwurf von Algorithmen bzw. Programmen<br />
auf dem Prinzip der Schrittweisen Verfeinerung. Was genau ist aber unter diesem Prinzip zu<br />
verstehen? Schauen Sie sich unser Beispiel an. Eine intuitive Losungsidee ist folgende: Der Hamster<br />
soll zunachst bis zum Berg laufen und dann den Berg erklimmen. An dem " und\ in diesem<br />
Satz erkennen Sie, da das Problem in zwei Teilprobleme zerlegt werden kann:<br />
Der Hamster soll zum Berg laufen.<br />
Der Hamster soll den Berg erklimmen.<br />
Damit haben wir das Problem " verfeinert\. Wir mussen nun diese beiden Teilprobleme losen.<br />
Wenn wir anschlie end die Losungen der beiden Teilprobleme zusammensetzen, erhalten wir die<br />
Losung des Gesamtproblems.<br />
Ubertragen wir dieses Prinzip nun auf die Programmierung. In Kapitel 8 haben Sie mit der Prozedurde<br />
nition ein Sprachkonstrukt kennengelernt, mit dem Sie neue Befehle de nieren konnen.<br />
Dieses Sprachkonstrukt werden wir nun verwenden, um Hamsterprogramme nach dem Prinzip<br />
der Schrittweisen Verfeinerung zu entwickeln. De nieren Sie dazu fur jedes Teilproblem zunachst<br />
einfach eine Prozedur, ohne sich um die Implementierung zu kummern. Das Hauptprogramm<br />
setzt sich dann einfach aus den Aufruf der Prozeduren zusammen. An dem Beispielprogramm<br />
sei dieses verdeutlicht:<br />
// der Hamster soll zunaechst bis zum Berg laufen<br />
// und dann den Berg erklimmen<br />
void main()<br />
{<br />
laufe_zum_berg();<br />
erklimme_den_berg();<br />
}<br />
// der Hamster soll zum Berg laufen<br />
void laufe_zum_berg()<br />
{<br />
}<br />
// der Hamster soll den Berg erklimmen