Sie sind auf Seite 1von 8

Einfhrung in das Programmieren (f.Ing.

), Schleifen

Einfhrung in das
Programmieren (fr Ingenieure)
Programmieren in C
Chr. Vetter

bersicht

Planung und Entwurf mit Struktogrammen


Grundlagen
Bedingte Programmierung
Schleifen
Felder
Funktionen
Dateien
Datenstrukturen
Zeigertechnik
Blick in Fensterprogrammierung
(event-orientiert)

IPP.TUC, Christian Vetter

Einfhrung in das Programmieren (f.Ing.), Schleifen

Schleifen
Schleifenkonstruktionen dienen zur wiederholten Ausfhrung einer einzelnen Anweisung oder einer zu einem
Block zusammengefassten Gruppe von Anweisungen.
Arten von Schleifen:
- while Schleife (potentiell abweisend)
- do-while Schleife (nicht abweisend)
- for Schleife (zhlend, potentiell abweisend)

Die while Schleife


Die while Schleife hat die allgemeine Form:
while(log. Ausdruck)
Anweisung oder {Anweisungsblock};
Solange der log. Ausdruck wahr(true) ergibt, wird Anweisung
ausgefhrt.
Falls der log. Ausdruck falsch(false) ergibt, wird Anweisung
nicht ausgefhrt und die Schleifenstrukur verlassen.
Da der Ausdruck schon bei der ersten Auswertung falsch
sein kann, heit die while Schleife auch abweisende
Schleife.

IPP.TUC, Christian Vetter

Einfhrung in das Programmieren (f.Ing.), Schleifen

Die while Schleife Beispiel


Beim Lesen aus einer Datei ist nicht von vornherein sicher,
dass diese auch Informationen enthlt. Deshalb ist die kopfgesteuerte Schleife, die erst prft und dann liest, die richtige
Variante (s. Abschnitt 7: Dateien):
string zeile;
// Datei versuchen zu ffnen
ifstream in_dat("notizen.txt");
if in_dat.isopen() // wenn gelungen
// solange nicht End-of-File
while(!in_dat.eof())
{
in_dat >> zeile;
// Verarbeitung der Zeile
}

Die do-while Schleife


Sie hat die allgemeine Form:
do
Anweisung oder {Anweisungsblock}
while(log. Ausdruck);
Im Gegensatz zur while Schleife wird Anweisung bei der
do-while Schleife wenigstens einmal durchlaufen,
unabhngig vom Wert des log. Ausdrucks. Eine do-while
Schleife ist daher auch eine nichtabweisende Schleife.
Solange der log. ausdruck wahr(true) ist, wird Anweisung
wiederholt. Falls der log. ausdruck falsch(false) ist, wird
Anweisung nicht wiederholt und die Schleifenstruktur verlassen.
Das Semikolon (;) hinter dem (log. Ausdruck) darf nicht
fehlen. Sonst folgt ein Syntaxfehler beim bersetzen.

IPP.TUC, Christian Vetter

Einfhrung in das Programmieren (f.Ing.), Schleifen

Die do-while Schleife Beispiel


Iterationen knnen typischerweise in dieser Form einer fugesteuerten Schleife umgesetzt werden.
Erst wird ein Iterationsschritt abgearbeitet, dann wird geklrt, ob
die gewnschte Ergebnisgte erreicht ist. Wenn der Fehler
noch zu gro ist, wird ein weiterer Iterationsschritt abgearbeitet.
float erg=0, erg_old, eps=0.001;
do {
erg_old = erg;
// Anweisungen fr einen Iterationsschritt
erg = . . .;
}
while(fabs(erg-erg_old)>eps);

Die for Schleife (I)


Sie hat die allgemeine Form:
for(Ausdruck_1; log. Ausdruck_2; Ausdruck_3)
Anweisung oder {Anweisungsblock};
Ausdruck_1: Initialisierungsausdruck (Zuweisung(en))
- wird nur einmal ausgewertet.
- bewirkt Anfangswertzuweisung der Schleifenvariable(n)

Ausdruck_2: Schleifenbedingung (log. Ausdruck)


Solange Ausdruck_2 wahr(true), wird Anweisung ausgefhrt.
Ist Ausdruck_2 falsch(false), wird Anweisung nicht mehr ausgefhrt und
die Schleifenstruktur verlassen

Ausdruck_3: Reinitialisierungsausdruck (Zuweisung(en))


- wird im Anschluss an Anweisung ausgewertet.
- bewirkt in der Regel eine Abnderung der Schleifenvariablen.

IPP.TUC, Christian Vetter

Einfhrung in das Programmieren (f.Ing.), Schleifen

Die for Schleife (II)


Eine for Schleife ist quivalent zu folgender while Schleife:
Ausdruck_1;
while(log. Ausdruck_2) {
Anweisung;
Ausdruck_3;
}
Es gibt keine Zwnge, die eine oder andere Art der Schleifen
zu benutzen. Ein Programmierer sollte im eigenen Interesse
eine mglichst ausdrucksvolle und nachvollziehbare Schleife
formulieren.

Die for Schleife (III)


Beispiel "Die ersten zehn Quadratzahlen":
for (i=1; i<=10; i=i+1)
cout << i << ' ' << i*i << endl;
Mit Hilfe des Komma Operators (,) knnen in einer for Schleife
statt eines einzelnen Zuweisungsausdrucks mehrere
Ausdrcke angegeben werden, z.B.
fr Ausdruck_1 zwei oder mehr Initialisierungsausdrcke oder
fr Ausdruck_3 zwei oder mehr Reinitialisierungsausdrcke.
Beispiel "Zwei gegenlufig gezhlte Ganzzahlen":
for (i=0, j=100; i<j; i=i+1, j=j-1)
cout << i << ' ' << j << ' ' << i+j << endl;

IPP.TUC, Christian Vetter

Einfhrung in das Programmieren (f.Ing.), Schleifen

Sonderflle (I)
In einer for Schleife kann jeder der Ausdrcke Ausdruck_1,
Ausdruck_2, Ausdruck_3 fehlen.
Unendliche Schleife als
for Schleife (endlos)

while Schleife (endlos)

for ( ; ; )
{
// Anweisungen
}

while (1)
{
// Anweisungen
}

Die Schleifenbedingung wird immer als wahr angesehen.


Die break Anweisung bewirkt, dass die innerste umgebende
for, while oder do-while Schleife verlassen wird,
unabhngig von der Schleifenbedingung. Bei einer bewusst
konstruierten Endlosschleife muss ein Ausbruch mit break
erfolgen, damit diese schlielich doch verlassen wird.

Sonderflle (II)
Die continue Anweisung bewirkt, dass
der aktuelle Schleifendurchlauf abgebrochen und die Schleife mit der nchsten
Iteration fortgesetzt wird. Es kommt aber
nicht wie bei break zum Abbruch der
gesamten Schleife.
Die continue Anweisung eignet sich in
Schleifen dafr, Rechenarbeit (Zeit) zu
sparen, wenn erkennbar ist, dass die
restlichen Anweisungen des Schleifenblocks keinen Sinn mehr machen.

IPP.TUC, Christian Vetter

for ( ; ; )
{ // Schleifenblock
.
.
.
continue;
.
.
.
break;
.
.
.
}

Einfhrung in das Programmieren (f.Ing.), Schleifen

Inkrement- und Dekrement-Operatoren (I)


Prfix++i
--i

Postfix-Notation
Bedeutung
i++
i=i+1 (inkrementieren)
i-i=i-1 (dekrementieren)

Der Unterschied zwischen Prfix- und Postfix-Notation


wird deutlich, wenn eine weitere Operation beteiligt ist:
Beispiel:
x = ++i;
x = i++;
y = --i;
y = i--;

bedeutet
bedeutet
bedeutet
bedeutet

i
x
i
y

=
=
=
=

i+1;
i;
i-1;
i;

x
i
y
i

=
=
=
=

i;
i+1;
i;
i-1;

Inkrement- und Dekrement-Operatoren (Ia)


- Hufige Nutzungen
for (i=0; i<anz; i++)
{
// Schleifenanweisungen
}
// oder
for (i=0, j=100; i<j; i++, j--)
{
// Schleifenanweisungen
}

IPP.TUC, Christian Vetter

Einfhrung in das Programmieren (f.Ing.), Schleifen

Inkrement- und Dekrement-Operatoren (II)


weitere Beispiele:
++i*k bedeutet: erst i inkrementieren, dann neues i
mit k multiplizieren.
i++*k bedeutet: erst altes i mit k multiplizieren,
dann i inkrementieren.
--j*k bedeutet: erst j dekrementieren, dann neues j
mit k multiplizieren.
j--*k bedeutet: erst altes j mit k multiplizieren,
dann j dekrementieren.
Bei nur geringster Unsicherheit in der Nutzung dieser Operatoren, sollte man die ausgeschriebenen Formen bevorzugen!

Kurzform von Zuweisungsausdrcken


Wenn die Ergebnisvariable der linken Seite einer Zuweisung
auf der rechten Seite mit ihrem vorigen Wert eingesetzt wird
(z.B. Summenbildung in einer Schleife), kann eine verkrzte
Form der Zuweisung verwendet werden.
i
i
i
i
i

=
=
=
=
=

i+k;
i-k;
i*k;
i/k;
i%k;

entspricht
entspricht
entspricht
entspricht
entspricht

i
i
i
i
i

+=
-=
*=
/=
%=

k;
k;
k;
k;
k;

Auch diese Schreibweise sollte nur bei entsprechender


Programmiersicherheit verwendet werden.

IPP.TUC, Christian Vetter