Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - WHILE - Schleife

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

  • Gib das Programm A08_01.c ein und speicher es mit Save Project As unter dem Namen A08_01 ab.
  • Beschreibe für jede Programmzeile was das Programm macht.
  • Starte das Programm mit  Run with Terminal.
  • Stimmen die Vorhersagen mit der Terminalausgabe überein?

 

 

Programm A08_01.c

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

 

  • Speicher das Programm A08_01 über  Save Project As unter dem neuen Namen A08_02 ab.
  • Ersetze die Programmzeile while(n < 100) durch while(1).
  • Starte das veränderte Programm und überprüfe seine Funktion.

 

Auch eine Endlosschleife muss nicht endlos durchlaufen werden, dazu stellt die Sprache C ein besonderes Schlüsselwort bereit.

 

Übung 2

 

  • Speicher das Programm unter dem neuen Namen A08_03 ab.
  • Füge die Zeile if(n == 50) break; in den Befehlsblock der While-Schleife ein.
  • Teste das Programm anschließend und überzeuge dich, dass es die Schleife verlässt, sobald n den Wert 50 angenommen hat.
  • Was passiert, wenn die break-Anweisung direkt nach n = n + 5 eingefügt würde?

     

 

Programm A08_03.c

Programm A08_03.c

2 - FOR- Schleife

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

 

  • Gib das Programm A09_01.c ein und speicher es mit  Save Project As ab.
  • Starte das Programm über  Run with Terminal und überprüfe seinen Ablauf.

 

 

Programm A09_01.c

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.

  • Speicher das alte Programm mit  Save Project As unter dem neuen Namen A09_02 ab und verändere anschließend die for- Schleife wie unten dargestellt.
  • Überprüfe, ob der Zähler bis 200 in 5-er Schritten aufwärts zählt.

 

 

Programm A09_02.c

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.

 

Druckversion | Sitemap
© Reinhard Rahner - Gettorf