zurück weiter

C++

G.Eichelsdörfer - Staatliche Technikerschule Weilburg

Ablaufstrukturen: Schleifen für Wiederholungen (Iterationen) (1)

Angenommen, ein Anwender möchte mit Hilfe des Programms brutto (erste Übungen) mehrmals hintereinander einen Bruttopreis berechnen. Dann ist dies nur möglich, indem er das Programm wiederholt ausführen lässt, es also für jede Berechnung neu startet.

Jede Ausführung eines Programms erfordert vom Computer zeitraubende Vorbereitungen wie Speicherplatz reservieren und Binärcode (exe-Datei) laden. Dies nehmen Sie beim Laden umfangreicher Programme wie Adobe Photoshop oder Netscape Navigator deutlicher wahr als in unserem kleinen Programm. Das Starten mitsamt den entsprechenden Vorbereitungen müsste jedoch nicht wiederholt werden, wenn unser Programm selbst seinen Ablauf, oder einen Teil dessen, wiederholen könnte.

Das Programm kann beispielsweise nach der Ausgabe eines berechneten Bruttopreises einen neuen Nettopreis erfragen um einen weiteren Bruttopreis zu ermitteln ... Die dazu erforderliche Ablaufstruktur wird Schleife, Wiederholung oder auch Iteration genannt. Schleife ist am gebräuchlichsten.

Wenn nach einer Anweisungssequenz diese erneut ausgeführt werden soll, dann muss der Programmablauf zum Anfang dieser Sequenz zurückkehren. Wie Sie der Abbildung rechts entnehmen können, besitzt diese Schleife zwar einen Eingang aber keinen Ausgang. Eine derartige Schleife wird endlos wiederholt, weshalb sie Endlosschleife genannt wird.

Eine solche Schleife ist in üblichen Programmen nicht sinnvoll. Irgendwann wird ein Anwender keinen weiteren Nettopreis mehr haben, den das Programm umrechnen soll. In einem solchen Fall bliebe nur ein gewaltsames Beenden des Programms, was keine ernst zu nehmende Lösung darstellt.

Endlosschleife

Die Schleife benötigt somit einen Ausgang, durch den die Schleife verlassen werden kann. Ein solcher Ausgang kann am Anfang der Schleife oder an deren Ende angeordnet werden.

Innerhalb des Schleifenablaufs liegt nun eine Verzweigung vor. An dieser Stelle muss der einzuschlagende Weg durch eine Bedingung gesteuert werden - ähnlich einer bedingten Anweisung.

Die links abgebildete Schleife nennt man auch kopfgesteuert, die rechte dagegen fußgesteuert. Hier soll zunächst die kopfgesteuerte Schleife verwendet werden.

kopfgesteuerte Schleife fußgesteuerte Schleife
Ausgang am Schleifenanfang,
am Kopf der Schleife
Ausgang am Schleifenende,
am Fuß der Schleife

Für unser Bruttopreis-Programm muss nun der Anwender dem Programm signalisieren können, dass er keine weitere Berechnung wünscht.

Eine einfache Möglichkeit ist die Eingabe eines Nettowertes, dessen Verarbeitung sinnlos ist. Hierfür können wir beispielsweise vereinbaren, dass ein nicht-positiver Nettowert als sinnlos gelten soll und damit die Schleife beendet wird. Der Bruttopreis soll also nur berechnet und ausgegeben werden, solange für Netto ein positiver Wert eingegeben wird.

Die Schleifenbedingung lautet also hier: Netto > 0

Schleifenbedingung

Die Codierung in C++ entsteht aus folgender sinnvoller Formulierung:
Solange Netto > 0 ist, führe die Anweisung(en) in der Schleife aus.
Diese Anweisungen sind hier zunächst die Berechnung des Bruttopreises und dessen Ausgabe.

In C++ lautet die Schleifenanweisung entsprechend:
while(Netto > 0)
{
 <Anweisungssequenz>
}

Hinter while folgt eine runde Klammer mit einem booleschen Ausdruck, dessen Wahrheitswert zur Programmlaufzeit darüber entscheidet, ob die folgende(n) Anweisung(en) abgearbeitet werden (wahr) oder die Schleife verlassen wird (falsch). Besteht die Anweisungssequenz aus nur einer Anweisung, so dürfen die geschweiften Klammern auch weggelassen werden.

Die Regel (Syntax) zur Erzeugung einer kopfgesteuerten Schleife lautet also:
while(<boolescher Ausdruck>)
{
 <Anweisungssequenz>
}