Bedingte Anweisungen
Bei der Umsetzung von
Zustandsübergangsdiagrammen in Automaten haben
Sie vielleicht die bedingte Anweisung in Java bereits kennengelernt und
verwendet.
Falls das nicht der Fall ist, überspringen Sie
Aufgabe 1!
In welchem Zusammenhang wurde die bedingte
Anweisung bei der Implementierung von
Zustandsübergangsdiagrammen
benötigt?
Lösung
|
Sie kennen bedingte Anweisungen bereits aus der 7. und
9. Klasse.
Interpretieren Sie folgende Anweisung bzw.
Funktion:
 |
 |
Robot Karol (7.Jgst.) |
Bedingte Funktion
(9.Jgst.) |
Lösung |
Lösung |
|
In Java gibt es nun ebenfalls eine bedingte
Anweisung, die nach dem gleichen Prinzip abläuft.
Lesen Sie auf Ihrem Java Überblick zunächst das
Beispiel zum
Abschnitt über bedingte Anweisungen und machen Sie sich
anschließend
noch einmal mit der Java-Syntax vertraut. |
 |
Ergänzen Sie nun Ihren Hefteintrag:
Bedingte Anweisung
- Bei einer zweiseitig bedingten Anweisung wird,
abhängig von einer Bedingung, eine von zwei möglichen
Sequenzen ausgeführt.
- Bei einer einseitig bedingten Anweisung wird,
abhängig von einer Bedingung, nur eine Sequenz ausgeführt. Im Fall, dass die Bedingung
false
liefert, passiert nichts. In der Regel wird dies durch Weglassen des SONST-Teils (else-Teils)
realisiert.
|
Bedingungen - wie war das
gleich wieder?
Nun sollen Sie an einigen Übungen die bedingte Anweisung in
Java anwenden:
Karol
soll so programmiert werden, dass er eine Steinreihe invertieren
kann. Was das bedeutet, sehen Sie auf den beiden folgenden Bildern.
Er wandert zur Wand. Liegt ein Stein auf dem Feld
vor ihn, so hebt er ihn auf, andernfalls legt er einen
Stein ab.
„Bringen“ Sie Karol das
Invertieren „bei“, indem Sie eine
Methode invertieren()
entwickeln!
Das untere Struktogramm liefert Ihnen eine Hilfestellung.
|
Betrachten Sie nun den untenstehenden Quelltext
der Methode xxx.
a) Vervollständigen Sie dazu passend das
Struktogramm. Nehmen Sie notfalls Ihren Java-Überblick zu
Hilfe.
public void
xxx (int n)
{
for (int
i=1; i<=n; i=i+1)
{
if
(karol.IstWand())
{
karol.RechtsDrehen();
karol.Hinlegen();
karol.Schritt();
}
else
{
karol.Hinlegen();
karol.Schritt();
}
}
}
|
 |
b) Was bewirkt diese Methode und was bedeutet der
Eingangsparameter n?
c) Wieso benötigt man hier
überhaupt eine bedingte Anweisung?
Testen Sie die Methode für verschiedene
Startzustände von Karol, falls Sie keine Lösung
für Aufgabe b) und c) finden
|
Falls Sie zeitlich gut im Rennen liegen oder mehr
üben wollen, können Sie noch die folgenden
Zusatzaufgaben bearbeiten. Ansonsten haben Sie jetzt alle
Algorithmik-Bausteine behandelt! An aufwendigeren Algorithmen
können Sie nun noch Ihr Können
überprüfen.
Karol steht vor einer "löchrigen"
Ziegelreihe. Er wandert wieder zur Wand und soll die Lücken
mit Steinen auffüllen.
Entwickeln Sie eine entsprechende Methode reiheAuffuellen() .
|
Erstellen Sie eine Methode die folgendes macht:
- erst die Methode
spazieren() aufrufen
- dann von seiner Position aus eine Ziegelreihe bis
zur nächsten Wand legen, aber nur an jeder zweiten Stelle soll
ein Ziegel abgelegt werden.
|
|