Difference between revisions of "NL/Documentation/BASIC Guide/Loops"

From Apache OpenOffice Wiki
Jump to: navigation, search
(Do...Loop)
 
Line 14: Line 14:
 
De lus <tt>For...Next</tt> heeft een vast aantal doorlopen. De teller voor de lus definieert het aantal malen dat de lus moet worden uitgevoerd. In het volgende voorbeeld, is variabele <tt>I</tt> de teller voor de lus, met een oorspronkelijke waarde van 1. De teller wordt verhoogd met 1 bij elk einde van een doorloop. Als variabele I gelijk is aan 10, stopt de lus.
 
De lus <tt>For...Next</tt> heeft een vast aantal doorlopen. De teller voor de lus definieert het aantal malen dat de lus moet worden uitgevoerd. In het volgende voorbeeld, is variabele <tt>I</tt> de teller voor de lus, met een oorspronkelijke waarde van 1. De teller wordt verhoogd met 1 bij elk einde van een doorloop. Als variabele I gelijk is aan 10, stopt de lus.
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim I  
 
Dim I  
 
For I = 1 To 10
 
For I = 1 To 10
 
   ' ...  Inner part of loop  
 
   ' ...  Inner part of loop  
 
Next I
 
Next I
</source>
+
</syntaxhighlight>
  
 
Als u de teller voor de lus wilt verhogen met een andere waarde dan 1 aan het einde van elke doorloop, gebruik dan de functie <tt>Step</tt>:
 
Als u de teller voor de lus wilt verhogen met een andere waarde dan 1 aan het einde van elke doorloop, gebruik dan de functie <tt>Step</tt>:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim I  
 
Dim I  
 
For I = 1 To 10 Step 0.5
 
For I = 1 To 10 Step 0.5
 
   ' ... Inner part of loop  
 
   ' ... Inner part of loop  
 
Next I
 
Next I
</source>
+
</syntaxhighlight>
  
 
In het voorgaande voorbeeld, wordt de teller verhoogd met 0.5 aan het einde van elke doorloop en de lus wordt 19 keer uitgevoerd.
 
In het voorgaande voorbeeld, wordt de teller verhoogd met 0.5 aan het einde van elke doorloop en de lus wordt 19 keer uitgevoerd.
Line 34: Line 34:
 
U mag ook negatieve waarden voor Step gebruiken:
 
U mag ook negatieve waarden voor Step gebruiken:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim I  
 
Dim I  
 
For I = 10 To 1 Step -1
 
For I = 10 To 1 Step -1
 
   ' ... binnenste gedeelte van de lus  
 
   ' ... binnenste gedeelte van de lus  
 
Next I
 
Next I
</source>
+
</syntaxhighlight>
  
 
In dit voorbeeld begint de teller met 10 en wordt met 1 verlaagd aan het einde van elke doorloop totdat de teller op 1 staat.
 
In dit voorbeeld begint de teller met 10 en wordt met 1 verlaagd aan het einde van elke doorloop totdat de teller op 1 staat.
Line 45: Line 45:
 
De uitdrukking <tt>Exit For</tt> stelt u in staat een lus <tt>For</tt> voortijdig te verlaten. In het volgende voorbeeld, wordt de lus beëindigd gedurende de vijfde doorloop:
 
De uitdrukking <tt>Exit For</tt> stelt u in staat een lus <tt>For</tt> voortijdig te verlaten. In het volgende voorbeeld, wordt de lus beëindigd gedurende de vijfde doorloop:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim I  
 
Dim I  
 
For I = 1 To 10  
 
For I = 1 To 10  
Line 53: Line 53:
 
   ' ... binnenste gedeelte van de lus  
 
   ' ... binnenste gedeelte van de lus  
 
Next I
 
Next I
</source>
+
</syntaxhighlight>
  
 
== <tt>For Each</tt> ==
 
== <tt>For Each</tt> ==
De variatie lus <tt>For Each...Next</tt> in VBA wordt ondersteund in {{OOo}} Basic. Lussen <tt>For Each</tt> gebruiken geen expliciete teller zoals een lus <tt>For...Next</tt> doet. Een lus <tt>For Each</tt> zegt "doe dit voor alles in deze verzameling", in plaats van "doe dit n keer". Bijvoorbeeld:
+
De variatie lus <tt>For Each...Next</tt> in VBA wordt ondersteund in {{AOo}} Basic. Lussen <tt>For Each</tt> gebruiken geen expliciete teller zoals een lus <tt>For...Next</tt> doet. Een lus <tt>For Each</tt> zegt "doe dit voor alles in deze verzameling", in plaats van "doe dit n keer". Bijvoorbeeld:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Const d1 = 2
 
Const d1 = 2
 
Const d2 = 3
 
Const d2 = 3
Line 67: Line 67:
 
     ' ... binnenste gedeelte van de lus  
 
     ' ... binnenste gedeelte van de lus  
 
Next i
 
Next i
</source>
+
</syntaxhighlight>
 
De lus zal 36 keer worden uitgevoerd.
 
De lus zal 36 keer worden uitgevoerd.
  
 
== <tt>Do...Loop</tt> ==
 
== <tt>Do...Loop</tt> ==
  
De <tt>Do...Loop</tt> is niet gekoppeld aan een vast aantal doorlopen. In plaats daarvan wordt de <tt>Do...Loop</tt> uitgevoerd totdat aan een bepaalde voorwaarde wordt voldaan. Er zijn vier varianten van de <tt>Do...Loop</tt>. In de eerste twee voorbeelden zou de code binnen de lus helemaal niet uitgevoerd hoeven worden ("doe 0 keer" logica). In de latere voorbeelden zal de code ten minste één maakl worden uitgevoerd. (In de volgende voorbeelden vertegenwoordigt <tt>A > 10</tt> een willekeurige voorwaarde):
+
De <tt>Do...Loop</tt> is niet gekoppeld aan een vast aantal doorlopen. In plaats daarvan wordt de <tt>Do...Loop</tt> uitgevoerd totdat aan een bepaalde voorwaarde wordt voldaan. Er zijn vier varianten van de <tt>Do...Loop</tt>. In de eerste twee voorbeelden zou de code binnen de lus helemaal niet uitgevoerd hoeven worden ("doe 0 keer" logica). In de latere voorbeelden zal de code minstens één maal worden uitgevoerd. (In de volgende voorbeelden vertegenwoordigt <tt>A > 10</tt> een willekeurige voorwaarde):
  
 
<ol class="task">
 
<ol class="task">
 
<li>De versie <tt>Do While...Loop</tt>
 
<li>De versie <tt>Do While...Loop</tt>
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Do While A > 10
 
Do While A > 10
 
   ' ... body van de lus
 
   ' ... body van de lus
 
Loop
 
Loop
</source>
+
</syntaxhighlight>
 
controleert of de voorwaarde na de <tt>While</tt> '''true''' is vóór elke doorloop en voert alleen dan de lus uit.</li>
 
controleert of de voorwaarde na de <tt>While</tt> '''true''' is vóór elke doorloop en voert alleen dan de lus uit.</li>
 
<li>De versie <tt>Do Until...Loop</tt>
 
<li>De versie <tt>Do Until...Loop</tt>
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Do Until A > 10
 
Do Until A > 10
 
   ' ... body van de lus
 
   ' ... body van de lus
 
Loop
 
Loop
</source>
+
</syntaxhighlight>
voert de lus net zo lang uit totdat de voorwaarde na de <tt>Until</tt> evalueeert naar '''false'''.</li>
+
voert de lus net zo lang uit totdat de voorwaarde na de <tt>Until</tt> evalueert naar '''false'''.</li>
 
<li>De versie <tt>Do...Loop While</tt>
 
<li>De versie <tt>Do...Loop While</tt>
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Do
 
Do
 
   ' ... body van de lus
 
   ' ... body van de lus
 
Loop While A > 10
 
Loop While A > 10
</source>
+
</syntaxhighlight>
 
controleert de voorwaarde na de eerste doorloop en eindigt als de voorwaarde na de <tt>While</tt> evalueert naar '''false'''.</li>
 
controleert de voorwaarde na de eerste doorloop en eindigt als de voorwaarde na de <tt>While</tt> evalueert naar '''false'''.</li>
 
<li>De versie <tt>Do...Loop Until</tt>
 
<li>De versie <tt>Do...Loop Until</tt>
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Do
 
Do
 
   ' ... body van de lus
 
   ' ... body van de lus
 
Loop Until A > 10
 
Loop Until A > 10
</source>
+
</syntaxhighlight>
 
controleert de voorwaarde na de eerste doorloop, maar eindigt als de voorwaarde na de <tt>Until</tt> evalueert naar '''true'''.</li>
 
controleert de voorwaarde na de eerste doorloop, maar eindigt als de voorwaarde na de <tt>Until</tt> evalueert naar '''true'''.</li>
 
</ol>
 
</ol>
Line 107: Line 107:
 
Net zoals in de lus <tt>For...Next</tt> verschaft de <tt>Do...Loop</tt> ook een opdracht voor beëindiging. De opdracht <tt>Exit Do</tt> kan een lus op elk punt in de lus verlaten.
 
Net zoals in de lus <tt>For...Next</tt> verschaft de <tt>Do...Loop</tt> ook een opdracht voor beëindiging. De opdracht <tt>Exit Do</tt> kan een lus op elk punt in de lus verlaten.
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Do  
 
Do  
 
   If A = 4 Then
 
   If A = 4 Then
Line 114: Line 114:
 
   ' ... body van de lus
 
   ' ... body van de lus
 
Loop While A > 10
 
Loop While A > 10
</source>
+
</syntaxhighlight>
In sommige gevallen zou de lus alleen kunnen eindigen wanneer aan een voorwaarde wordt voldaan binnen de lus. Dan kunt u de "perpetuele" Do Loop gebruiken:
+
In sommige gevallen zou de lus alleen kunnen eindigen wanneer binnen de lus aan een voorwaarde wordt voldaan. Dan kunt u de "perpetuele" Do Loop gebruiken:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Do  
 
Do  
 
   ' ... enkele interne berekeningen
 
   ' ... enkele interne berekeningen
Line 123: Line 123:
 
   ' ... andere instructies
 
   ' ... andere instructies
 
Loop
 
Loop
</source>
+
</syntaxhighlight>
  
 
== <tt>While...Wend</tt> ==
 
== <tt>While...Wend</tt> ==
  
The <tt>While...Wend</tt> loop construct works exactly the same as the <tt>Do While...Loop</tt>, but with the disadvantage that there is no <tt>Exit</tt> command available. The following two loops produce identical results:
+
De <tt>While...Wend</tt> loop construeert het werk precies hetzelfde als de <tt>Do While...Loop</tt>, maar met het nadeel dat er geen opdracht <tt>Exit</tt> beschikbaar is. De volgende twee loops produceren identieke resultaten:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Do While A > 10
 
Do While A > 10
 
   ' ... loop body
 
   ' ... loop body
Line 137: Line 137:
 
   ' ... loop body
 
   ' ... loop body
 
Wend
 
Wend
</source>
+
</syntaxhighlight>
  
== Programming Example: Sorting With Embedded Loops ==
+
== Voorbeeld programmeren: Sorteren met ingebedde loops ==
  
There are many ways to use loops, for example, to search lists, return values, or execute complex mathematical tasks. The following example is an algorithm that uses two loops to sort a list by names.
+
Er zijn een aantal manieren om loops te gebruiken, bijvoorbeeld, om lijsten te doorzoeken, waarden terug te geven, of complexe rekenkundige taken uit te voeren. Het volgende voorbeeld is een algoritme dat twee loops gebruikt om een lijst met namen te sorteren.
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Sub Sort
 
Sub Sort
 
   Dim Entry(1 To 10) As String
 
   Dim Entry(1 To 10) As String
Line 176: Line 176:
  
 
End Sub
 
End Sub
</source>
+
</syntaxhighlight>
  
The values are interchanged as pairs several times until they are finally sorted in ascending order. Like bubbles, the variables gradually migrate to the right position. For this reason, this algorithm is also known as a [http://en.wikipedia.org/wiki/Bubble_sort Bubble Sort].
+
De waarden worden onderling meerdere malen als paren uitgewisseld, totdat zij uiteindelijk worden gesorteerd in oplopende volgorde. Net als bubbels migreren de variabelen geleidelijk naar de juiste positie. Dit algoritme staat daarom bekend als een [https://en.wikipedia.org/wiki/Bubble_sort Bubble Sort].
  
 
   
 
   
 
{{InterWiki Languages BasicGuide|articletitle=Documentation/BASIC Guide/Loops}}
 
{{InterWiki Languages BasicGuide|articletitle=Documentation/BASIC Guide/Loops}}
 
{{PDL1}}
 
{{PDL1}}

Latest revision as of 14:52, 9 February 2021

Book.png


Een lus voert het codeblok uit over het aantal doorlopen dat werd gespecificeerd. U kunt ook lussen hebben met een niet gedefinieerd aantal doorlopen.

For...Next

De lus For...Next heeft een vast aantal doorlopen. De teller voor de lus definieert het aantal malen dat de lus moet worden uitgevoerd. In het volgende voorbeeld, is variabele I de teller voor de lus, met een oorspronkelijke waarde van 1. De teller wordt verhoogd met 1 bij elk einde van een doorloop. Als variabele I gelijk is aan 10, stopt de lus.

Dim I 
For I = 1 To 10
  ' ...  Inner part of loop 
Next I

Als u de teller voor de lus wilt verhogen met een andere waarde dan 1 aan het einde van elke doorloop, gebruik dan de functie Step:

Dim I 
For I = 1 To 10 Step 0.5
  ' ... Inner part of loop 
Next I

In het voorgaande voorbeeld, wordt de teller verhoogd met 0.5 aan het einde van elke doorloop en de lus wordt 19 keer uitgevoerd.

U mag ook negatieve waarden voor Step gebruiken:

Dim I 
For I = 10 To 1 Step -1
  ' ... binnenste gedeelte van de lus 
Next I

In dit voorbeeld begint de teller met 10 en wordt met 1 verlaagd aan het einde van elke doorloop totdat de teller op 1 staat.

De uitdrukking Exit For stelt u in staat een lus For voortijdig te verlaten. In het volgende voorbeeld, wordt de lus beëindigd gedurende de vijfde doorloop:

Dim I 
For I = 1 To 10 
  If I = 5 Then 
    Exit For
  End If
  ' ... binnenste gedeelte van de lus 
Next I

For Each

De variatie lus For Each...Next in VBA wordt ondersteund in Apache OpenOffice Basic. Lussen For Each gebruiken geen expliciete teller zoals een lus For...Next doet. Een lus For Each zegt "doe dit voor alles in deze verzameling", in plaats van "doe dit n keer". Bijvoorbeeld:

Const d1 = 2
Const d2 = 3
Const d3 = 2
Dim i
Dim a(d1, d2, d3)
For Each i In a()
    ' ... binnenste gedeelte van de lus 
Next i

De lus zal 36 keer worden uitgevoerd.

Do...Loop

De Do...Loop is niet gekoppeld aan een vast aantal doorlopen. In plaats daarvan wordt de Do...Loop uitgevoerd totdat aan een bepaalde voorwaarde wordt voldaan. Er zijn vier varianten van de Do...Loop. In de eerste twee voorbeelden zou de code binnen de lus helemaal niet uitgevoerd hoeven worden ("doe 0 keer" logica). In de latere voorbeelden zal de code minstens één maal worden uitgevoerd. (In de volgende voorbeelden vertegenwoordigt A > 10 een willekeurige voorwaarde):

  1. De versie Do While...Loop
    Do While A > 10
       ' ... body van de lus
    Loop
    controleert of de voorwaarde na de While true is vóór elke doorloop en voert alleen dan de lus uit.
  2. De versie Do Until...Loop
    Do Until A > 10
      ' ... body van de lus
    Loop
    voert de lus net zo lang uit totdat de voorwaarde na de Until evalueert naar false.
  3. De versie Do...Loop While
    Do
      ' ... body van de lus
    Loop While A > 10
    controleert de voorwaarde na de eerste doorloop en eindigt als de voorwaarde na de While evalueert naar false.
  4. De versie Do...Loop Until
    Do
      ' ... body van de lus
    Loop Until A > 10
    controleert de voorwaarde na de eerste doorloop, maar eindigt als de voorwaarde na de Until evalueert naar true.

Net zoals in de lus For...Next verschaft de Do...Loop ook een opdracht voor beëindiging. De opdracht Exit Do kan een lus op elk punt in de lus verlaten.

Do 
  If A = 4 Then
    Exit Do
  End If
  ' ... body van de lus
Loop While A > 10

In sommige gevallen zou de lus alleen kunnen eindigen wanneer binnen de lus aan een voorwaarde wordt voldaan. Dan kunt u de "perpetuele" Do Loop gebruiken:

Do 
  ' ... enkele interne berekeningen
  If A = 4 Then    Exit Do
  ' ... andere instructies
Loop

While...Wend

De While...Wend loop construeert het werk precies hetzelfde als de Do While...Loop, maar met het nadeel dat er geen opdracht Exit beschikbaar is. De volgende twee loops produceren identieke resultaten:

Do While A > 10
   ' ... loop body
Loop
 
While A > 10
   ' ... loop body
Wend

Voorbeeld programmeren: Sorteren met ingebedde loops

Er zijn een aantal manieren om loops te gebruiken, bijvoorbeeld, om lijsten te doorzoeken, waarden terug te geven, of complexe rekenkundige taken uit te voeren. Het volgende voorbeeld is een algoritme dat twee loops gebruikt om een lijst met namen te sorteren.

Sub Sort
  Dim Entry(1 To 10) As String
  Dim Count As Integer
  Dim Count2 As Integer
  Dim Temp As String
 
  Entry(1) = "Patty"
  Entry(2) = "Kurt"
  Entry(3) = "Thomas"
  Entry(4) = "Michael"
  Entry(5) = "David"
  Entry(6) = "Cathy"
  Entry(7) = "Susie"
  Entry(8) = "Edward"
  Entry(9) = "Christine"
  Entry(10) = "Jerry"
 
  For Count = 1 To 9
    For Count2 = Count + 1 To 10
      If Entry(Count) > Entry(Count2) Then
        Temp = Entry(Count)
        Entry(Count) = Entry(Count2)
        Entry(Count2) = Temp
      End If
    Next Count2
  Next Count
 
  For Count = 1 To 10
    Print Entry(Count)
  Next Count
 
End Sub

De waarden worden onderling meerdere malen als paren uitgewisseld, totdat zij uiteindelijk worden gesorteerd in oplopende volgorde. Net als bubbels migreren de variabelen geleidelijk naar de juiste positie. Dit algoritme staat daarom bekend als een Bubble Sort.


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools