home *** CD-ROM | disk | FTP | other *** search
/ Inside Multimedia 1994 October / IMM1094.ISO / demo / optix / optix200 / opt200.prg / LOOPS.INF < prev    next >
Text File  |  1994-04-16  |  5KB  |  161 lines

  1.  
  2. Schleifen
  3.  
  4. Eine SCHLEIFE nennt man jede Form von Programmstruktur, die bewirkt, daß ein 
  5. ganz bestimmter Programmblock mehrmals nacheinander durchlaufen wird. In 
  6. OPTIX sind drei solcher LOOPS (Loop;engl.: Schleife) verwendbar:
  7.  
  8.                     die         FOR...NEXT-Schleife
  9.         die         REPEAT...UNTIL-Schleife
  10.         und die    DO...LOOP-Schleife
  11.  
  12.  
  13. Die For...Next - Schleife
  14.  
  15. Die gebräuchlichste Schleifenform, die FOR...NEXT-Schleife, verwendet keine 
  16. Bedingungen zur Steuerung, sondern führt die Schleife so oft aus, wie in einer 
  17. Zählanweisung vorgegeben wird. Dieser Schleifentyp bietet dem Programmierer 
  18. zwar viele Freiheiten, arbeitet dafür jedoch nicht so schnell wie eine DO-LOOP-
  19. Schleife, da sie im Schleifenablauf wesentlich mehr Informationen zu verarbeiten 
  20. und Bedingungen zu überprüfen hat.
  21.  
  22. Die Grundkonstruktion sieht folgendermassen aus:
  23.  
  24.         FOR I:= 12 TO 50 DO
  25.         NEXT(I)
  26.  
  27. Der Ablauf ist folgendermassen: Zuerst wird hier der Schleifenvariablen I der 
  28. Anfangswert 12 zugewiesen. Bei Erreichen von NEXT wird I um 1 inkrementiert. 
  29. Ist der Endwert von 50 noch nicht erreicht worden,  wird die Schleife 
  30. wiederholt.
  31.  
  32. Soll die Schleifenvariable um den Wert 1 abwärts zählen, kann dies durch Angabe 
  33. des Zusatzes DOWNTO statt TO erreicht werden:
  34.  
  35.         FOR I:= 30 DOWNTO 0 DO
  36.         NEXT(I)
  37.  
  38. Optional (wahlweise) kann durch den Zusatz STEP eine Schrittweite angegeben 
  39. werden. Die Schleifenvariable (in diesem Fall I) wird  beim Erreichen von NEXT 
  40. dann nicht um 1 erhöht oder vermindert, sondern um den angegeben STEP-Wert. 
  41. Die Schleife wird abgebrochen, sobald die Schleifenvariable den Endwert über- 
  42. (bei positiver Schrittweite) oder unterschreitet (bei negativer Schrittweite).
  43.  
  44.     Beispiel:
  45.  
  46.         FOR I:= 10 TO 100 STEP 10 DO
  47.         NEXT(I)
  48.  
  49.         FOR I:= 100 TO 1 STEP -2 DO
  50.         NEXT(I)
  51.  
  52.  
  53.  
  54. Die Do...Loop - Schleife
  55.  
  56. Eine Schleife mit einem grundsätzlich in Einerschritten abwärts gerichteten 
  57. Zähler ist die DO...LOOP-Schleife. Dieser Schleifentyp führt den zwischen DO 
  58. und LOOP eingeschlossenen Programmblock solange aus, bis die bei LOOP 
  59. angegebene Variable den Wert Null erreicht hat.
  60.  
  61.     DEF(XN)
  62.     DEF(I)
  63.     BEGIN
  64.        CLEARSCREEN(8)
  65.        SETCOLOR(14)
  66.        XN := 50
  67.        I  := 29
  68.        DO
  69.           LINE(320,450,XN,30,0)
  70.           INC(XN,20)
  71.        LOOP(I)
  72.        PAUSE(0)
  73.     END
  74.  
  75. Die Schleife besteht aus DO und LOOP(). Bei LOOP wird die 'Schleifenvariable' 
  76. angegeben. Erreicht das Programm beim Ablaufen ein LOOP, wird die Schleifen-
  77. variable dekrementiert, d.h. um 1 vermindert. Ist die Variable dann noch größer 
  78. als Null, erfolgt ein Sprung aufwärts zum dazugehörigen DO. 
  79.  
  80. In unserem Beispiel wird die Schleifenvariable I vor dem Eintritt in die 
  81. Schleife auf 29 gesetzt, die Schleife wird also 29 mal durchlaufen. Innerhalb 
  82. der Schleife wird  XN jeweils um 20 erhöht, so daß die Endpunkte der Linien 
  83. immer weiter nach rechts wandern. Da XN mit dem Wert 50 beginnt und 29 mal um 
  84. den Wert 20 erhöht wird, ergibt sich also als Koordinate der letzten Linie die 
  85. X-Position 630. Erreicht I den Wert  0, wird die Schleife abgebrochen und beim 
  86. nächstfolgenden Befehl weitergearbeitet.
  87.  
  88. Soll eine DO...LOOP- oder FOR...NEXT-Schleife vorzeitig abgebrochen werden, hat 
  89. man die Möglichkeit, nach Erfüllung einer in der Schleife gestellten Bedingung 
  90. anhand des GOTO-Befehls zu einem Label außerhalb der Schleife zu springen:
  91.  
  92.    .
  93.    I :=100
  94.    DO
  95.      INC(A,2)
  96.      B:=A*A
  97.      STR(A,4,A$)
  98.      STR(B,7,B$)
  99.      PRINTLN('Das Quadrat von '+A$+' ist: '+B$)
  100.      IF B > 1000
  101.        GOTO('LOOPEXIT')
  102.      ENDIF
  103.    LOOP(I)
  104.    :LOOPEXIT
  105.    .
  106.    ... weiteres Programm
  107.  
  108. Bei beiden Schleifenarten ist es möglich, diese ineinander zu verschachteln. 
  109. Es kann also in einer Schleife eine weitere, egal welcher Art, aufgerufen 
  110. werden.
  111.  
  112.     I:=20
  113.     DO
  114.       REPEAT
  115.         INC(A,2)
  116.         B:=A*A
  117.         STR(A,4,A$)
  118.         STR(B,7,B$)
  119.         PRINTLN('Das Quadrat von '+A$+' ist: '+B$)
  120.         FOR J:=1 TO I DO
  121.           PRINT('*** ')
  122.         NEXT(J)
  123.       UNTIL A <= (I*10)
  124.     LOOP(I)
  125.  
  126. Bei Verschachtelungen dieser Art ist darauf zu achten, daß die jeweiligen 
  127. Schleifenwendepunkte (NEXT und LOOP) in der umgekehrten Reihenfolge Ihrer 
  128. Startanweisungen (FOR und DO) gesetzt werden.
  129.  
  130.     Falsch:                    Richtig:
  131.  
  132.     FOR I:=1 To 10 DO            FOR I:=1 To 10 DO
  133.       FOR J:=1 To 10 DO                FOR J:=1 To 10 DO
  134.       NEXT(I)                  NEXT(J)
  135.     NEXT(J)                    NEXT(I)
  136.  
  137.  
  138.  
  139.  
  140.  
  141. Die endbedingte Repeat..Until-Schleife
  142.  
  143.  
  144. Eine endbedingte REPEAT..UNTIL-Schleife entsteht folgendermassen:
  145.  
  146.     A :=5
  147.     REPEAT        <---------------.
  148.       INC(A,1)            | Schleife,
  149.       PLOT(100+A,100+A)        |-solange A
  150.     UNTIL A >=10              =-----' kleiner 10
  151.  
  152. Innerhalb der Schleife wird hier ein Zähler A durch INC bei jedem Durchlauf um 
  153. 1 erhöht und anschließend ein Bildschirmpunkt mit diesem Laufindex A gezeichnet.
  154. Wie Sie sehen, bestimmt die Bedingung 'A >= 10', daß die Schleife so oft durch-
  155. laufen wird, bis der Inhalt der Variablen 'A' den Wert 10 überschreitet.
  156.  
  157. Die wesentliche Eigenart dieses Schleifentyps ist, daß der Schleifeninhalt auf 
  158. jeden Fall mindestens einmal durchlaufen wird, da die Bedingungsabfrage erst 
  159. am Ende der Schleife erfolgt.
  160.  
  161.