2.2.1.9. Kontrollstrukturen: Schleifen

Nächste Seite

Neben den bedingten Anweisungen gibt es in der Programmierung eine weitere wichtige Kontrollanweisung: die Programmschleifen. Darunter versteht man eine Folge von Aktionen oder Teilprogrammen, die physisch nur einmal im Programmcode vorhanden ist, und so lange wiederholt und durchlaufen wird, bis eine Bedingung (ein Abbruchskriterium) erfüllt ist. Ist ein solches Abbruchskriterium nicht vorhanden, kommt es zu einer so genannten "Endlosschleife", einem typischen Programmfehler: Die Folge von Bedingungen wird unendlich oft wiederholt und findet keinen Abschluss.
In TI-85 BASIC können Schleifen grundsätzlich auch durch eine Zusammenanwendung der Befehle "
goto" und "if- then" ersetzt werden. Schleifen gelten jedoch als "besserer Programmierstil", machen das Programm übersichtlicher und lassen sich in Struktogrammen besser darstellen.

Eine Schleife besteht grundsätzlich aus einer Abbruchbedingung, die den Ein- und Austritt in bzw. aus der Schleife bestimmt, und einem Schleifenkörper (Schleifenrumpf), der die zu wiederholenden Befehle und Anweisungen enthält.

In der Programmierung unterscheidet man 3 grundsätzliche Schleifentypen:

 

Zählschleifen

In Zählschleifen wird eine beliebige Variable (keine Systemvariable) von einem Startwert ausgehend bei jedem Schleifendurchlauf um 1 (oder einen anderen Wert) erhöht. Als Abbruchbedingung dient ein bestimmter Wert, den die zu inkrementierende Variable überschreiten muss, um die Schleife zu beenden. Solange der Endwert noch nicht überschritten ist, werden die Anweisungen im Schleifenkörper ausgeführt.
Die Anzahl der Schleifendurchläufe muss vor dem Eintritt in den Schleifenkörper bekannt sein, sonst kommt es zu einem Programmfehler. Außerdem sollte der Wert der zu inkrementierenden Variablen innerhalb des Schleifenkörpers nicht durch Anweisungen oder Befehle geändert werden, obwohl dies möglich.
Das Schlüsselwort für eine Zählschleife ist in den meisten höheren Programmiersprachen "
For".

Struktogrammdarstellung von Zählschleifen

for.gif (1679 Byte)

In TI-85 BASIC werden Zählschleifen folgendermaßen verwendent:

:For([Variablenname],[Anfangswert],[Endwert],[Inkrement])
:[Anweisungen]
:End

Der Anfangswert kann beliebig gewählt werden. Ist er größer als der Endwert, so muss das Inkrement negativ sein, damit die Variable "heruntergezählt" wird. Die Angabe eines Inkrements ist nicht unbedingt notwendig. Der Standartwert liegt bei 1 und wird verwendet, wenn kein anderer Wert angegeben wird.
Am Ende des Schleifenkörpers muss auf jeden Fall ein "
End" stehen, um das Ende der zu wiederholenden Anweisungen zu markieren.

For- Schleifen können beliebig verschachtelt werden, d.h. im Schleifenkörper kann wieder eine For- Schleife stehen usw.

Beispiel:

Aufgabe: Es soll eine Tabelle erstellt werden, die eine minimierte Version des kleinen 1x1 enthält, d.h. alle Zahlen von 1 bis 5 sollen miteinander multipliziert werden und ordentlich als eine Art Tabelle ausgegeben werden.
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
1 Eine Lösung ohne Schleifen könnte zum Beispiel folgendermaßen aussehen:
:0®I
:ClLCD
:LBL START
:I+1®I
:Outpt(I,1,I) :Outpt(I,5,I*2) :Outpt(I,9,I*3) :Outpt(I,13,I*4) :Outpt(I,17,I*5)
:If (I<5) :Goto START
2 Durch Verwendung einer Schleife, würde die Lösung so aussehen:
:ClLCD
:For(I,1,5)
:Outpt(I,1,I) :Outpt(I,5,I*2) :Outpt(I,9,I*3) :Outpt(I,13,I*4) :Outpt(I,17,I*5)
:End
3 Die beste und einfachste Lösung wäre aber eine verschachtelte For- Schleife, die folgendermaßen aussehen könnte:
:ClLCD
:For(I,1,5)
:For(I2,1,5)
:Outpt(I,1+(I2-1)*4,I*I2)
:End :End

 

Bedingte Schleifen

Entsprechend der Stelle, an der die Abbruchsbedingung überprüft wird, unterscheidet man 2 Typen von bedingten Schleifen: Solche mit vorangestellter Bedingungsprüfung ("While- Schleifen") und Schleifen mit nachgestellter Bedingungsprüfung ("Repeat- Schleifen"). Diese Schleifentypen sind im reinen BASIC in dieser Form nicht vorhanden, existieren aber in TI-85 BASIC.

Schleifen mit vorangestellter Bedingungsprüfung

Bei diesem Schleifentyp wird vor jeder Wiederholung eine Bedingung überprüft. Solange diese Bedingung wahr (ungleich 0) ist, werden die Anweisungen im Schleifenkörper ausgeführt. Ist die Bedingung von Beginn an nicht erfüllt, so wird der Schleifenkörper nicht durchlaufen und kein einziges Mal ausgeführt. In diesem Fall liegt eine so genannte "Leerschleife" vor. Das Schlüsselwort, das eine Schleife mit vorangestellter Bedinungsprüfung definiert ist "While". Dies bedeutet soviel, wie "solange Bedingung wahr ist, wiederhole...".
Eine While- Schleife kann immer eine For- Schleife ersetzen, wenn man im Schleifenkörper einen Zähler einbaut. Auch sonst sind beide Schleifentypen ähnlich:
Auch am Ende des Schleifenkörpers einer While- Schleife muss unbedingt ein "
End" stehen und sie können ebenfalls verschachtelt werden.

Struktogrammdarstellung von While- Schleifen

while.gif (1394 Byte)

In TI-85 BASIC werden While- Schleifen folgendermaßen verwendent:

:While [Bedingung]
:[Anweisungen]
:End

Beispiel:

Aufgabe: Es soll wieder eine Tabelle mit dem kleinen 1x1 erstellt werden. Diesmal unter Verwendung einer einfachen und einer verschachtelten "While- Schleife".
4 Eine einfache While- Schleife mit Zähler im Schleifenkörper ersetzt die "For Schleife" aus Beispiel 2.
:ClLCD
:1®I
:While I<6
:Outpt(I,1,I) :Outpt(I,5,I*2) :Outpt(I,9,I*3) :Outpt(I,13,I*4) :Outpt(I,17,I*5)
:I+1®I
:End
5 Bei Verwendung einer verschachtelten While- Schleife sähe das Programm folgendermaßen aus:
:ClLCD
:1®I
:While I<6
:1®I2
:While I2<6
:Outpt(I,1+(I2-1)*4,I*I2)
:I2+1®I2
:End
:I+1®I
:End

 

Schleifen mit nachgestellter Bedingungsprüfung

Im Gegensatz zu den While- Schleifen wird bei diesem Schleifentyp die Bedingung erst nach Ausführung des Schleifenkörpers ausgewertet, die darin enthaltenen Anweisungen werden somit mindestens einmal ausgeführt. Eine Leerschleife ist deswegen nicht möglich. Die mit dem Schlüsselwort "repeat" definierten Schleifen werden solange wiederholt, bis die Bedingung wahr (ungleich 0) wird.
Auch Repeat- Schleifen können verschachtelt werden.

Struktogrammdarstellung von Repeat- Schleifen

repeat.gif (1387 Byte)

Die Darstellung von Repeat- Schleifen erfolgt in TI-85 BASIC folgendermaßen:

:Repeat [Bedingung]
:[Anweisungen]
:End

Beispiel:

Aufgabe: Diesmal soll die Erstellung der 1x1 Tabelle unter Verwendung einer Repeat- Schleife erfolgen, in einfacher Form und verschachtelt.
6 Eine einfache Repeat- Schleife mit enthaltener Zählanweisung ersetzt die Zählschleife aus Beispiel 2.
:ClLCD
:1®I
:Repeat I>5
:Outpt(I,1,I) :Outpt(I,5,I*2) :Outpt(I,9,I*3) :Outpt(I,13,I*4) :Outpt(I,17,I*5)
:I+1®I
:End
7 Durch die Verschachtelung der Repeat- Schleife wird der Quelltext effektiver:
:ClLCD
:1®I
:Repeat I>5
:1®I2
:Repeat I2>5
:Outpt(I,1+(I2-1)*4,I*I2)
:I2+1®I2
:End
:I+1®I
:End

 


Hinweis: Grundsätzlich kann jeder Schleifentyp einen anderen ersetzen und es ist durchaus möglich fast alle Programme unter Verwendung von nur einem Schleifentyp zu schreiben. Dennoch sollte man im Hinblick auf Effektivität versuchen immer, den am besten geeignetesten Typ von Schleife zu verwenden. Dies verlangt weniger Tippaufwand und spart Speicherplatz.