robotik:lektion1:13_schleifen [NwT am Albert-Einstein-Gymnasium Reutlingen]

Benutzer-Werkzeuge

Webseiten-Werkzeuge


robotik:lektion1:13_schleifen

13 Schleifen

Eine weitere Verbesserung des Konsolenprogramms Taschenrechner könnte drin bestehen, dem Anwender bei einem Eingabefehler die Möglichkeit zu einer erneuten Eingabe zu geben. Man könnte z.B. die Eingabe solange wiederholen, bis endlich eine gültige, d.h. nicht negative Zahl eingegeben wurde. In einem Flussdiagramm sieht der Ablauf dann so aus:

Flussdiagramm mit einer Schleife

Wie in den beiden vorhergehenden Beispielen gibt es hier eine Verzweigung mit der Prüfung einer Bedingung. Der Ablauf ist aber grundsätzlich verschieden von einer bedingten Anweisung oder einer ja-nein-Verzweigung. Hier wird ein bzw. werden mehrere Ablaufschritte ausgeführt, und dann wird anhand der Bedingung geprüft, ob die Ausführung dieser Schritte wiederholt werden soll. Erst wenn diese sogenannte Schleifenbedingung nicht mehr erfüllt ist, geht es mit den auf die Schleife folgenden Befehlen weiter. In einem Programm nennen wir den Programmteil, der ggf. mehrfach wiederholt wird, den Schleifenblock. Das folgende Programm zeigt, wie man den abgebildeten Ablauf in einem Java-Programm mit Hilfe einer sogenannten do-while-Schleife implementieren kann:

float x;
// Mit dem Schlüsselwort do beginnt die Schleife:
do
{
    // Dies ist der Schleifenblock.
    // Er besteht hier nur aus einem Programmschritt.
    // Nach dem Durchlauf der Schleife wird geprüft,
    // ob die Schleife wiederholt werden soll.
    // Die Schleife wird wiederholt, solange die
    // Schleifenbedingung (hier: x < 0) erfüllt ist.
 
    x = konsole.leseZahl("Bitte eine nicht negative Zahl eingeben:");
}
while (x < 0);  // Das Schlüsselwort while ("solange") gefolgt von
                // der Schleifenbedingung schließt die Schleife ab.
 
// Der folgende Programmteil wird erst dann ausgeführt,
// wenn die Schleife beendet ist.
float wurzel = (float)Math.sqrt(x);  // Der Java-Befehl (float)Math.sqrt(x)
                                     // berechnet die Wurzel aus x und
                                     // liefert das Ergebnis als float-Zahl.
konsole.schreibe("Die Wurzel aus ");
konsole.schreibe(x);
konsole.schreibe(" ist: ");
konsole.schreibeZeile(wurzel);
konsole.schreibeZeile("Auf Wiedersehen.");

Java bietet neben der do-while-Schleife noch weitere Schleifentypen an. Wir kommen bei der Programmierung des Roboters vollkommen mit der do-while-Schleife aus, d.h. du musst dir auch nur diese Schleife merken. Eine andere Art der Schleife wäre z.B. die sogenannte while-Schleife, bei der die while-Zeile mit der Schleifenbedingung vor dem Schleifenblock steht. Hier wird die Bedingung bereits vor der ersten Ausführung geprüft, so dass der Schleifenblock unter Umständen überhaupt nicht ausgeführt wird. Tatsächlich wäre die while-Schleife für unseren Anwendungsfall sogar etwas geschickter, falls man dem Anwender bei einer falschen Eingabe eine Fehlermeldung anzeigen möchte. Die ersten Programmzeilen aus dem Beispiel oben müsste man dann durch folgenden Programmcode ersetzen:

float x = konsole.leseZahl("Bitte eine nicht negative Zahl eingeben:");
// Mit dem Schlüsselwort while gefolgt von der Bedingung beginnt die Schleife:
while (x < 0)
{
    // Dies ist der Schleifenblock.
    // Dieser wird ausgeführt, solange die
    // Schleifenbedingung (hier: x < 0) erfüllt ist.
 
    konsole.schreibeZeile("Die eingegebene Zahl war leider negativ.");
    x = konsole.leseZahl("Bitte jetzt eine nicht negative Zahl eingeben:");
}


Achtung

Wenn die Schleifenbedingung erfüllt ist, wird die Schleife fortgesetzt und nicht abgebrochen. Bei der do-while-Schleife steht hinter der while-Zeile ein Semikolon, bei der while-Schleife allerdings nicht!


Aufgabe

Übersetze und teste das Programm mit der do-while-Schleife. Gib wieder positive und negative Zahlen ein. Wenn du möchtest, kann du auch die Programmversion mit der while-Schleife testen.

robotik/lektion1/13_schleifen.txt · Zuletzt geändert: 2016/09/22 18:57 von gollnik