Artikel
do-while Schleife


Rubrik:
Grundlagen

Typ:
Zusammenfassung

Stand:
abgeschlossen

Stichworte:
Programmierung, Kontrollstrukturen, Schleife, do-while, while, for, c, c++, Referat, Grunglagen, Anfänger


Einleitung

Das Konzept der Wiederholungen bzw. Schleifen beruht darauf den linearen Ablauf der bisher besprochenen Programme zu durchbrechen. Sie dienen dazu innerhalb eines Programms zurück zu springen und Anweisungen bzw. Programmblöcke zu wiederholen.

Es gibt verschiedene Formen von Schleifen, die jedoch alle eine Gemeinsamkeit haben:

Die Schleifen BEDINGUNG:

Die Bedingung einer Schleife gibt an, wann das Programm die Schleife verlassen soll (bzw. wie lange die Schleife ausgeführt werden soll.)

while-Schleifen allgemein haben keine eigene Zählvariable (im Gegensatz zu for-Schleifen), die in der Bedingung abgefragt wird. Vielmehr kann in der Bedingung jede Anweisung oder Eigenschaft stehen die einen boolschen Wert zurückgibt. Die while-Schleife wird solange ausgeführt, wie die Bedingung wahr ist.

Schleifentypen

Man unterscheidet zwischen drei verschiedenen Arten von Schleifen:

  1. Schleifen mit einer Abfrage vor jeden Durchlauf. (ggfs. keinmal durchlaufen)

    int x=0;
    while (x==1) {
      x++;
    }
    => x ist Null

  2. Schleifen mit einer Abfrage nach jedem Durchlauf. (mindestens einmal durchlaufen)

    int x=0;
    do {
      x++;
    } while (x==1);
    => x ist Zwei

  3. Schleifen mit fester Durchlaufzahl

    int x=0;
    int i;
    for (i=1;i==1;i++) {
      x++;
    }
    => x ist Eins

Obwohl sich jede Schleife theoretisch durch einen anderen Schleifentyp ersetzen läßt (in vielen Fällen entscheidet die Vorliebe des Programmierers), so haben die einzelnen Typen jedoch verschiedene Vorteile.

  • Bedingte Schleifen (while, do-while)
    Die Schleife wird solange ausgeführt wie die Bedingung erfüllt ist.
  • Zählschleifen (for)
    Die Anzahl der Durchläufe steht von Beginn an fest.

 

Schleife RegulärerAbbruch Durchläufe
For ... Endwert der Zählvariableerreicht Durchläufe vorgegeben
While Bedingung ist FALSE Durchläufe>=0
Do-while Bedingung ist FALSE Durchläufe>=1

 

Schleifen

Anmerkung:
for-Schleifen werden schneller durchlaufen als while bzw. do-while Schleifen, sie sind aber auch nicht so flexibel.

while Schleife

while-Schleifen haben keine eigene Zählvariable. Deshalb liegt die Verantwortung die Abbruchbedingung zu erfüllen beim Programmierer. Das heißt im Programmblock der Schleife muß etwas geschehen, was den Wert der Bedingungsvariable verändert. Geschieht dies nicht, so kommt es zu einer Endlosschleife (ggfs. einem Systemabsturz ) .

do-while vs. while

Die while- und do-while Schleife unterscheiden sich lediglich in der Positionierung der Bedingung. Während diese bei der while-Schleife direkt am Anfang abgefragt wird, geschieht es bei der do-while Schleife erst am Ende.

Abbruch von Schleifen:
  • break
    Bewirkt, dass hinter das Ende der Schleife gesprungen wird.
  • continue
    Abbruch der aktuellen Wiederholung und sofortiger Beginn einer neuen Wiederholung
Geschachtelte Kontrollstrukturen:

Theoretisch ist es möglich Kontollstrukturen beliebig tief ineinander zu schachteln (Einschränkungen nur abhängig von der Programmiersprache oder dem Compiler). Bei komplexen Strukturen sollte die Klammer (ohne Bedingung) der Schleife mit einem Kommentar versehen werden, der den Bezug kennzeichnet.

while (...) { 
  while (...) {

  } // Ende innere Schleife
} // Ende äußere Schleife
Übungen:

Hier noch einige Übungen (Source Codes) mit Lösungen zu Thema Schleifen. Sie sind geschrieben für die CVI (National Instruments) Entwicklungsumgebung.

Download

Fazit:

do-while Schleifen sind anzuwenden wenn die Anweisung mindestens einmal durchlaufen werden soll. Es ist die Aufgabe des Programmierers die Bedingung für die Schleife zu setzen. Die Gefahr liegt dabei in der Produktion von Endlosschleifen.

 

Anhang

EXKURS: Logische Operatoren

Die Bedingung einer (do-)while-Schleife prüft einen boolschen Wert ab. Die Wiederholung wird solange durchgeführt wie das Ergebnis WAHR ist. Dieses System geht zurück auf die logischen Grundverknüpfungen die in "Informations- und Prozesstechnik" besprochen wurden. Hier ein Überblick:

Typ Boolean (Ein Bit)
Wertebereich (FALSE ,TRUE) (Nein/Ja, Falsch/Wahr, Low/High, 0/1)
Voreingestellter Wert FALSE (nach der Initialisierung)



Operationen:

Operator Bezeichnung Beispiel
== Gleichheit 1==2 ergibt FALSE
!= Ungleichheit 1!=2 ergibt TRUE
& bzw. && Logisches UND (1!=2) & (1!=3) ergibt TRUE
| bzw. || Logisches ODER (1==2) | (1==3) ergibt FALSE
^ Logisches XODER (1!=2) ^ (1!=3) ergibt FALSE



Anmerkung 1:
  • vollständige Auswertung (&, |):
    Der gesamte Ausdruck wird geprüft.
  • verkürzte Auswertung (&&, ||)
    Nur der erste Ausdruck wird geprüft bei UND/ODER, falls dieser FALSE/TRUE ist, weil dann der gesamte Ausdruck FALSE/TRUE ist.
Anmerkung2:
Der Variablentyp " bool x; " wird vom CVI Compiler nicht unterstützt. Man kann ihn jedoch über selber definieren:
#define TRUE 1, #define FALSE 0.


Referenz:
  • Grundlagen der Informatik (Helmut Balzert)
  • Der Perl Kurs (Udo Müller)


Impressum
 


Copyright 2002,2003 M. Schmitz