Einleitung | Einführungsbeispiel | Eingabe, Ausgabe, Variablen | Datentypen | Stukturen | For...EndFor | If...EndIf | Loop...EndLoop | While...EndWhile | Felder | Funktionen | Unterprogramme | Grafikprogrammierung | Index
Programmierkurs 

Die For...EndFor-Schleife

Dieser Schleifentypus benutzt einen Zähler, um die Anzahl der Schleifenwiederholungen zu steuern. Die genaue Syntax dieses Befehls lautet:
 
For Laufvariable, Anfangswert, Endwert [,Inkrement]
  Anweisungen
EndFor

Die Laufvariable dient als Zähler, der Anfangswert enthält den Wert der Laufvariablen zu Beginn des ersten Schleifendurchlaufs, der Endwert enthält jenen Wert, bei dem die Schleife zum letzten Mal durchlaufen wird. Will man den Zähler um einen anderen Wert als 1 (=Eins) erhöhen, kann man dies mit Hilfe des Parameters Inkrement durchführen. Das Inkrement darf übrigens auch negativ sein - in diesem Fall muss der Anfangswert natürlich größer als der Endwert sein. Einige Beispiele sollen dies verdeutlichen:
 

Dieser Programmkode führt zu folgender Ausgabe
For i, 1, 5
  Disp i
EndFor
For i, 2, 10, 2
  Disp i
EndFor
For i, 100, 200, 20
  Disp i
EndFor
For i, 20, 10, -2
  Disp i
EndFor

 
 
Beispiel 5 ("Summiere alle natürlichen Zahlen bis n")
Nachdem der Benutzer eine natürliche Zahl n eingegeben hat, soll das Programm die Summe 1 + 2 + 3 + 4 + ... + n berechnen. 

Wir wählen für die Zahl, bis zu der summiert werden soll, den Variablennamen n, für die Laufvariable den Namen i und für die zu berechnende Summe den Namen summe. Alle Variablen sollen lokale Variablen sein.
 

  1. Erzeuge eine neue Programmvariable mit Namen add.
  2. Füge den rechts abgebildeten "Standard"-Rahmencode ein.
add ()
Prgm
Local summe, n, i
ClrIO

EndPrgm

Für das Einlesen der Zahl n hätten wir diesmal gerne etwas mehr Komfort. Der Befehl Request AuffordString, Var erzeugt ein Dialogfeld für die Dateneingabe. AuffordString hat die gleiche Funktion wie beim Befehl Input, darf hier aber höchstens 20 Zeichen betragen.
 

  1. Füge nach ClrIO den Befehl Request "natürliche Zahl", n ein.
  2. Drücke die -Taste. (Der Cursor sollte nun am Beginn einer leeren Zeile stehen.)
  3. Drücke , 4: For...EndFor (dadurch wird der Schleifenbefehl und sein End-Befehl an der Cursorposition eingefügt) und gib nach For die Parameter i, 1, n ein.
Nicht nur der FOR-Schleifenbefehl lässt sich über ein Menü des Programmeditors einfügen, sondern auch einige andere Befehle, die wir zum Teil später noch kennenlernen werden, stehen hier abrufbereit zur Verfügung.
...
ClrIO
Request "natürliche Zahl", n
For i, 1, n

EndFor
EndPrgm

In dieser Schleife durchläuft die Laufvariable i alle Werte von 1 bis n.; d.h. beim ersten Durchlauf hat i den Wert 1, bei zweiten Durchlauf hat i den Wert 2, etc. Wenn es uns also gelingt bei jedem Schleifendurchlauf den Wert von i zur Variable summe zu addieren, sollte am Ende in der Variable summe tatsächlich die gewünschte Summe aller natürlicher Zahlen kleiner gleich n enthalten sein. Wir müssen also in jedem Durchlauf der Variablen summe den Wert der Variablen summe plus dem Wert der Laufvariablen i zuweisen. Eine Wertzuweisung am TI-92 erfolgt mit Hilfe des Zuordnungspfeiles, der mit der -Taste erzeugt werden kann.
 

  1. Füge zwischen For und EndFor den Befehl summe + i ® summe ein.
Für die bessere Lesbarkeit eines Programmes empfiehlt es sich, alle Anweisungen, die innerhalb einer Schleife stehen, um zwei Zeichen einzurücken.
...
For i, 1, n
  summe + i ® summe
EndFor
EndPrgm
  1. Führe das Programm nun aus und gib für n =100 ein.
Du musst in dem Dialogfeld, in dem du den Wert für n eingibst (siehe Abb. rechts), die Eingabe zweimal mit bestätigen.

Hast du alles genauso eingebeben, wie oben beschrieben, solltest du nun folgende Fehlermeldung am TI-Bildschirm sehen:

Es ist also ein Bereichsfehler aufgetreten. Betätigt man im obigen Fehler-Dialogfeld die -Taste, wird der Programmeditor geladen, und der Cursor blinkt an jener Stelle, die diese Fehlermeldung verursacht hat. In unserem Fall rechts vom n in der Zeile For i,1,n. Die Ursache für die Fehlermeldung liegt beim Befehl Request, da dieser die eingelesene Variable Var (in unserem Fall n) immer als String anlegt. Wie wir bereits wissen kann mit einem String nicht gerechnet werden; wir müssen diesen zunächst in eine Zahl verwandeln. Der TI-92 stellt dafür den Befehl expr() zur Verfügung.
 

  1. Füge nach dem Request-Befehl den Befehl expr(n) ® n ein. 
Wie du siehst, muss keine neue Variable erzeugt werden. Der Befehl expr(n) konvertiert die Stringvariable in eine Termvariable und mit ® n wird sie gleich wieder in n gespeichert.
...
Request "natürlicheZahl: ", n
expr(n) ® n
For i, 1, n
...
  1. Führe das Programm erneut aus und gib für n = 100 ein.

Verantwortlich für diese Fehlermeldung ist diesmal die Zeile summe + i ® summe. Hier wird der neue Wert von summe gebildet indem zum alten Wert von summe etwas dazugezählt wird. Erhält man also den neuen Wert einer Variablen unter Verwendung des alten Wertes, muss diese zunächst initialisiert werden, d.h. mit einem Anfangswert (in unserem Fall mit Null) belegt werden.
 

  1. Füge nach dem Befehl expr(n) ® n den Befehl 0 ® summe ein.
..
Request "natürlicheZahl: ", n
expr(n) ® n
0 ® summe
For i, 1, n
...
  1. Führe das Programm erneut aus und gib für n = 100 ein.

Was ist nun schon wieder passiert? Offensichtlich hat der TI-92 eine Berechnung durchgeführt - er meldet dies durch die Bildschirmausgabe Done. Aus irgendeinem Grund will er uns aber das Ergebis nicht anzeigen. Es liegt also nahe zu überprüfen, ob unser Programm überhaupt einen Befehl für die Ausgabe der Berechnung enthält. Da dies nicht der Fall ist, ergänzen wir die entsprechende Zeile und nun sollte das Programm wie gewünscht funktionieren:
 

  1. Füge nach dem Befehl EndFor den Befehl Disp summe ein.
...
EndFor
Disp summe
EndPrgm
  1. Führe das Programm erneut aus und gib für n = 100 ein.

Fehler in der Art wie sie soeben beschrieben wurden, werden dir - zumindest am Anfang - immer wieder passieren. Sie gehören zum Lernprozess einfach dazu. Es ist wichtig, dass du lernst die Fehlermeldungen zu analysieren und richtig darauf zu reagieren; d.h. tritt eine neuartige Fehlermeldung auf, erkundigt man sich zunächst im Anhang des Handbuch über die Bedeutung dieser Meldung.

Übungsaufgaben

 
  1. Verändere den Ausgabebefehl von Beispiel 5 so, dass die Anzeige folgende Form hat:
[Lösungsvorschlag]
  1. Nachdem der Benutzer eine natürliche Zahl n eingegeben hat, soll das Programm das Produkt 1*2*3*4*...*n berechnen. [Lösungsvorschlag]
Befindet man sich im Programmeditor kann man das aktuelle Programm mittels , 2: Save Copy as unter einem anderen Namen abspeichern und danach diese Kopie verändern. 

Verschachtelte Schleifen

Die For...EndFor-Schleife kann auch beliebig geschachtelt werden; d.h. es ist folgende Struktur zulässig:
 
For Laufvariable, Anfangswert, Endwert [,Inkrement]
  Anweisungen
  For Laufvariable, Anfangswert, Endwert [,Inkrement]
    Anweisungen
  EndFor
  Anweisungen
EndFor

 
 
Beispiel 6 ("X")
Am Bildschirm soll der Buchstabe X in der folgenden Form ausgegeben werden, wobei es dem Benutzer möglich sein soll, die "Breite" des Buchstabens anzugeben:
Breite: 3
Breite: 5
 

 
  1. Erzeuge die Programmvariable letterx.
  2. Wähle für die "Breite" den Variablennamen b und mache diese zu einer lokalen Variable.
  3. Lies die "Breite" mit dem Befehl Request ein.
  4. Vergiss nicht auf das Löschen des Bildschirmes.
  5. Vergleiche deine Eingabe mit der Abbildung rechts.
letterx()
Prgm
Local b
ClrIO
Request "Breite", b
expr(b) ® b
ClrIO

EndPrgm

Für die Ausgabe brauchen wir die Möglichkeit einer positionierten Ausgabe - diese ermöglicht uns der Befehl  Output Zeile, Spalte, TermOderString, wobei Zeile und Spalte für die Pixelkoordinaten des TI-92-Bildschirmes stehen.
Der TI-92-Bildschirm hat bekanntlich eine Auflösung von 240x105 Pixel. Damit ergeben sich folgende Koordinaten für die vier Eckpunkte:


Beachte, dass der Ursprung hier links oben liegt und nicht, wie vom Kartesischen Koordinatensystem gewohnt, links unten.

Der TI-92 verwendet für die Darstellung eines Zeichens 7x5 Pixel. Siehe folgende Beispiele:

Lässt man zwischen je zwei Buchstaben ein Pixel als Zwischenraum könnten also pro Zeile intDiv(240,6)=40 Zeichen und pro Spalte intDiv(105,8)=13 Zeichen dargestellt werden (Die Funktionsweise des Befehls intDiv kann im Handbuch nachgeschlagen werden). Da aber 0 Pixel Abstand vom Bildschirmrand die Lesbarkeit der ausgegebenen Texte stark beeinträchtigen würde, setzt der Befehl Output 0,0,"W" das erste Pixel (in obiger Abbildung blau markiert) nicht auf die Bildschirmkoordinate (0,0), sondern auf die Koordinate (5,1); d.h. es findet bezüglich der Bildschirm-Pixelkoordinaten eine Verschiebung um 5 Pixel nach rechts und 1 Pixel nach unten statt. Somit lassen sich also 40 Zeichen pro Zeile und 12 Zeichen pro Spalte ohne Überschneidungen schreiben, wie folgende Abbildung veranschaulicht:

Die Ausgabe des ersten Balkens von unserem "X" lässt sich durch folgenden Code bewerkstelligen:
 

For i, 0, 11
  For j, 1, b
    Output i * 8, (i + j) * 7, "*"
  EndFor
EndFor

Hier wird zunächst in der äußere Schleife das i auf 0 gesetzt und danach in der innere Schleife das j von 1 bis b abgearbeitet, danach wird in der äußeren Schleife das i auf 1 gesetzt und dann in der innere Schleife wiederum das j von 1 bis b abgearbeitet; usw.
 

  1. Erkläre die Variablen i und j zu lokalen Variablen.
  2. Füge nach dem zweiten ClrIO-Befehl den oben angebenen Code ein, starte das Programm und wähle eine Breite von 3. Dein Bildschirm sollte nun wie die Abbildung rechts aussehen.
  1. Versuche die Befehle für den zweiten Balken selbst zu finden.
Lösungsvorschlag

Übungsaufgaben

 
  1. Mit Hilfe einer verschachtelten FOR-Schleife soll am Bildschirm der Buchstabe V in der folgenden Form ausgegeben werden, wobei es dem Benutzer möglich sein soll, die "Breite" des Buchstabens anzugeben:
[Lösungsvorschlag]
  1. Mit Hilfe einer verschachtelten FOR-Schleife soll am Bildschirm folgendes Dreieck ausgegeben werden, wobei es dem Benutzer möglich sein soll, die Anzahl der Zeilen zu wählen:
[Lösungsvorschlag]

 
 



Mail an den Autor, Karl.Weinstich@theresianum.ac.at