home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Inside Multimedia 1994 October
/
IMM1094.ISO
/
demo
/
optix
/
optix200
/
opt200.prg
/
LOOPS.INF
< prev
next >
Wrap
Text File
|
1994-04-16
|
5KB
|
161 lines
Schleifen
Eine SCHLEIFE nennt man jede Form von Programmstruktur, die bewirkt, daß ein
ganz bestimmter Programmblock mehrmals nacheinander durchlaufen wird. In
OPTIX sind drei solcher LOOPS (Loop;engl.: Schleife) verwendbar:
die FOR...NEXT-Schleife
die REPEAT...UNTIL-Schleife
und die DO...LOOP-Schleife
Die For...Next - Schleife
Die gebräuchlichste Schleifenform, die FOR...NEXT-Schleife, verwendet keine
Bedingungen zur Steuerung, sondern führt die Schleife so oft aus, wie in einer
Zählanweisung vorgegeben wird. Dieser Schleifentyp bietet dem Programmierer
zwar viele Freiheiten, arbeitet dafür jedoch nicht so schnell wie eine DO-LOOP-
Schleife, da sie im Schleifenablauf wesentlich mehr Informationen zu verarbeiten
und Bedingungen zu überprüfen hat.
Die Grundkonstruktion sieht folgendermassen aus:
FOR I:= 12 TO 50 DO
NEXT(I)
Der Ablauf ist folgendermassen: Zuerst wird hier der Schleifenvariablen I der
Anfangswert 12 zugewiesen. Bei Erreichen von NEXT wird I um 1 inkrementiert.
Ist der Endwert von 50 noch nicht erreicht worden, wird die Schleife
wiederholt.
Soll die Schleifenvariable um den Wert 1 abwärts zählen, kann dies durch Angabe
des Zusatzes DOWNTO statt TO erreicht werden:
FOR I:= 30 DOWNTO 0 DO
NEXT(I)
Optional (wahlweise) kann durch den Zusatz STEP eine Schrittweite angegeben
werden. Die Schleifenvariable (in diesem Fall I) wird beim Erreichen von NEXT
dann nicht um 1 erhöht oder vermindert, sondern um den angegeben STEP-Wert.
Die Schleife wird abgebrochen, sobald die Schleifenvariable den Endwert über-
(bei positiver Schrittweite) oder unterschreitet (bei negativer Schrittweite).
Beispiel:
FOR I:= 10 TO 100 STEP 10 DO
NEXT(I)
FOR I:= 100 TO 1 STEP -2 DO
NEXT(I)
Die Do...Loop - Schleife
Eine Schleife mit einem grundsätzlich in Einerschritten abwärts gerichteten
Zähler ist die DO...LOOP-Schleife. Dieser Schleifentyp führt den zwischen DO
und LOOP eingeschlossenen Programmblock solange aus, bis die bei LOOP
angegebene Variable den Wert Null erreicht hat.
DEF(XN)
DEF(I)
BEGIN
CLEARSCREEN(8)
SETCOLOR(14)
XN := 50
I := 29
DO
LINE(320,450,XN,30,0)
INC(XN,20)
LOOP(I)
PAUSE(0)
END
Die Schleife besteht aus DO und LOOP(). Bei LOOP wird die 'Schleifenvariable'
angegeben. Erreicht das Programm beim Ablaufen ein LOOP, wird die Schleifen-
variable dekrementiert, d.h. um 1 vermindert. Ist die Variable dann noch größer
als Null, erfolgt ein Sprung aufwärts zum dazugehörigen DO.
In unserem Beispiel wird die Schleifenvariable I vor dem Eintritt in die
Schleife auf 29 gesetzt, die Schleife wird also 29 mal durchlaufen. Innerhalb
der Schleife wird XN jeweils um 20 erhöht, so daß die Endpunkte der Linien
immer weiter nach rechts wandern. Da XN mit dem Wert 50 beginnt und 29 mal um
den Wert 20 erhöht wird, ergibt sich also als Koordinate der letzten Linie die
X-Position 630. Erreicht I den Wert 0, wird die Schleife abgebrochen und beim
nächstfolgenden Befehl weitergearbeitet.
Soll eine DO...LOOP- oder FOR...NEXT-Schleife vorzeitig abgebrochen werden, hat
man die Möglichkeit, nach Erfüllung einer in der Schleife gestellten Bedingung
anhand des GOTO-Befehls zu einem Label außerhalb der Schleife zu springen:
.
I :=100
DO
INC(A,2)
B:=A*A
STR(A,4,A$)
STR(B,7,B$)
PRINTLN('Das Quadrat von '+A$+' ist: '+B$)
IF B > 1000
GOTO('LOOPEXIT')
ENDIF
LOOP(I)
:LOOPEXIT
.
... weiteres Programm
Bei beiden Schleifenarten ist es möglich, diese ineinander zu verschachteln.
Es kann also in einer Schleife eine weitere, egal welcher Art, aufgerufen
werden.
I:=20
DO
REPEAT
INC(A,2)
B:=A*A
STR(A,4,A$)
STR(B,7,B$)
PRINTLN('Das Quadrat von '+A$+' ist: '+B$)
FOR J:=1 TO I DO
PRINT('*** ')
NEXT(J)
UNTIL A <= (I*10)
LOOP(I)
Bei Verschachtelungen dieser Art ist darauf zu achten, daß die jeweiligen
Schleifenwendepunkte (NEXT und LOOP) in der umgekehrten Reihenfolge Ihrer
Startanweisungen (FOR und DO) gesetzt werden.
Falsch: Richtig:
FOR I:=1 To 10 DO FOR I:=1 To 10 DO
FOR J:=1 To 10 DO FOR J:=1 To 10 DO
NEXT(I) NEXT(J)
NEXT(J) NEXT(I)
Die endbedingte Repeat..Until-Schleife
Eine endbedingte REPEAT..UNTIL-Schleife entsteht folgendermassen:
A :=5
REPEAT <---------------.
INC(A,1) | Schleife,
PLOT(100+A,100+A) |-solange A
UNTIL A >=10 =-----' kleiner 10
Innerhalb der Schleife wird hier ein Zähler A durch INC bei jedem Durchlauf um
1 erhöht und anschließend ein Bildschirmpunkt mit diesem Laufindex A gezeichnet.
Wie Sie sehen, bestimmt die Bedingung 'A >= 10', daß die Schleife so oft durch-
laufen wird, bis der Inhalt der Variablen 'A' den Wert 10 überschreitet.
Die wesentliche Eigenart dieses Schleifentyps ist, daß der Schleifeninhalt auf
jeden Fall mindestens einmal durchlaufen wird, da die Bedingungsabfrage erst
am Ende der Schleife erfolgt.