home *** CD-ROM | disk | FTP | other *** search
/ Inside Multimedia 1995 July / IMM0795.ISO / demo / optix / optxfpac.set / LOOPS.INF < prev    next >
Text File  |  1995-03-29  |  5KB  |  165 lines

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