Manchmal ist es ganz hilfreich, wenn man den Prop-Controller anweisen könnte, bestimmte Befehle wiederholt auszuführen. Eine blinkende Leuchtdiode oder die Abfrage eines Bewegungssensors bei einem Roboter könnten ein solches Vorgehen erfordern.
Blöcke von sich wiederholenden Befehlen bezeichnen wir als Schleifen. Es gibt in der Sprache C verschiedene Formen von Schleifen, die unterschiedliche Namen tragen und alle über eine Abbruchbedingung
verfügen.
while-Schleife
Eine While-Schleife wird zum Beispiel solange ausgeführt, wie die genannte Abbruchbedingung nicht zutrifft, sie kann aber auch so angelegt sein, dass sie beliebig oft wiederholt wird (weil die Abbruchbedingung nie erreicht wird) oder man bricht aus ihr aus, ohne das die Abbruchbedingung abgefragt wurde. Wir werden das im Folgenden kennenlernen.
Übung 1
Programm A08_01.c
Wie arbeitet das Programm A08_01.c?
Zeile 10
In der Funktion main wird die Variable n vom Typ Integer (ganze Zahl) deklariert und mit dem Wert 0 initialisiert.
Zeilen 12 - 16 (Befehlsblock)
Der Befehlsblock in geschweiften Klammern, gleich nach dem while-Aufruf, wird solange wiederholt durchlaufen, bis n den Wert 100 erreicht hat.
Zeile 13
Nach dem Start des Programms wird auf dem Terminal über den print-Befehl n = 0 ausgegeben.
Zeile 14
Der Wert von n - bisher war er Null, wird um 5 erhöht. Gefolgt von einer Pause von 200 ms.
Solange der Wert von n kleiner als 100 ist, wird nach Zeile 13 zurückgegangen.
Sobald n den Wert 100 oder höher annimmt, ist die Abbruchbedingung der While-Schleife erfüllt; die Ausführung des Befehlsblocks wird abgebrochen und das Programm setzt seine Arbeit mit dem
ersten Befehl nach dem Befehlsblock der While-Schleife fort.
Zeile 17
Im Terminalfenster erscheint der Text: "Fertig!".
Was du wissen solltest!
Denke immer daran, dass Relationen wie a < b oder n < 100 den Rückgabewert 1 haben, wenn die Aussage WAHR ist; ist sie FALSCH, ist der Wert 0.
Genau so wie beim If-Befehl wird bei einer While-Schleife der sich anschließende Befehlsblock in den geschweiften Klammern nur dann durchlaufen, wenn der Rückgabewert der Eingangsbedingung ungleich 0 ist.
Wie könnte man mit einer While-Bedingung eine Endlosschleife aufbauen?
Dazu schauen wir uns die Programmzeile while(1) an. Diese Aussage ist immer wahr, deshalb wird der anschließende Befehlsblock immer durchlaufen.
Übung 1a
Auch eine Endlosschleife muss nicht endlos durchlaufen werden, dazu stellt die Sprache C ein besonderes Schlüsselwort bereit.
Übung 2
Programm A08_03.c
For-Schleifen werden vorrangig als Zählschleifen, bei denen der nachfolgende Befehlsblock eine bestimmte Anzahl mal durchlaufen werden muss, benutzt, während While-Schleifen sich besser dort einsetzen lassen, wo mit dem Schleifendurchlauf eine Bedingung verknüpft ist. Im folgenden Programmbeispiel wird ein Aufwärtszähler bis 10 vorgestellt.
Übung 3
Programm A09_01.c
Wie arbeitet das Programm A09_01.c?
Die for-Anweisung enthält drei Übergabeparameter: for(start; Bedingung; Inkrement).
start – häufig wird der Startwert des Schleifenzähles mit einer Variablen festgelegt
Bedingung – wird die Bedingung erfüllt, startet der Schleifendurchlauf
Inkrement – definiert eine Rechenoperation für den Schleifenzähler bei jedem Schleifendurchlauf
Zeile 10
Im Programm A09_01 wird der Startindex (der Schleifenzähler) mit int n = 1 initialisiert. Die Bedingung für das Verbleiben in der Schleife ist angegeben mit n <= 10; das heißt,
die Schleife wird solange durchlaufen, wie der Wert n den Wert 10 nicht überschreitet. Das Inkrement wird mit n++ angegeben und bedeutet, dass n bei jedem Durchlauf um 1 erhöht wird: n = n + 1.
Zeile 12 und 13
Solange die Abbruchbedingung nicht erfüllt wird, wird auf dem Terminal die jeweils erreichte Zählzahl ausgegeben.
Was du wissen solltest!
Inkrement und Dekrement Operator
Der ++ Operator wird auch als Inkrement-Operator bezeichnet. Entsprechend der -- Operator als Dekrement-Operator.
++ erhöht eine Variable um 1
–– erniedrigt eine Variable um 1
Zuweisungsoperatoren
Es gibt weitere Kürzel für Zuweisungen von Werten an Variable.
Statt n = n + 5 kann man kürzer schreiben: n+= 5.
Entsprechend gilt für die Subtraktion: - = ,
für die Multiplikation *= und
die Division: /=.
Modulo n wird verkürzt durch %= dargestellt.
Übung 4
In der folgenden for - Schleife wird in 5-er Schritten von 0 bis 200 aufwärts gezählt.
Programm A09_02.c
Aufgabe
Verändere das Programm A09_02.c so, dass es in 5-er Schritten bis 200 und dann in 10-er Schritten abwärts bis 0 zählt.