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

From Apache OpenOffice Wiki
Jump to: navigation, search
(Created page with '{{NO/Documentation/BASICGuideTOC/v2 |ShowPrevNext=block |ShowPrevPage=block |PrevPage=NO/Documentation/BASIC Guide/Branching |NextPage=NO/Documentation/BASIC Guide/Procedures and…')
 
m
 
Line 15: Line 15:
 
Ofte brukes navnene i, j og k som tellere, som under der i antar
 
Ofte brukes navnene i, j og k som tellere, som under der i antar
 
verdiene 1, 2, 3, 4 og 5 (fem iterasjoner):
 
verdiene 1, 2, 3, 4 og 5 (fem iterasjoner):
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
For i = 1 To 5
 
For i = 1 To 5
 
   ...
 
   ...
 
Next i
 
Next i
</source>
+
</syntaxhighlight>
 
Det siste som skjer i kodeblokken er implisitt, at telleren
 
Det siste som skjer i kodeblokken er implisitt, at telleren
 
inkrementeres med stegverdien.  Vil en ha annen stegverdi enn 1 (en)
 
inkrementeres med stegverdien.  Vil en ha annen stegverdi enn 1 (en)
 
brukes "step".  I eksempelet under brukes desimaltall i stegverdi og
 
brukes "step".  I eksempelet under brukes desimaltall i stegverdi og
 
i yttergrensene.
 
i yttergrensene.
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
For temp = -2.3 to 14.7 step 3.2
 
For temp = -2.3 to 14.7 step 3.2
 
   ...
 
   ...
 
Next temp
 
Next temp
</source>
+
</syntaxhighlight>
 
Her blir "temp" -2.3, 0.9, 4.1, 7.3, 10.5, 13.7.  I siste iterasjon blir
 
Her blir "temp" -2.3, 0.9, 4.1, 7.3, 10.5, 13.7.  I siste iterasjon blir
 
verdien 16.9 som er mer enn yttergrensen 14.7, og gjentakelsene avbrytes da.
 
verdien 16.9 som er mer enn yttergrensen 14.7, og gjentakelsene avbrytes da.
Line 35: Line 35:
  
 
Vil en bryte ut prematurt brukes "Exit for" som i:
 
Vil en bryte ut prematurt brukes "Exit for" som i:
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
For I = 1 To 10  
 
For I = 1 To 10  
 
   If I = 5 Then  
 
   If I = 5 Then  
Line 42: Line 42:
 
   ...
 
   ...
 
Next I
 
Next I
</source>
+
</syntaxhighlight>
  
 
=== <tt>For Each</tt> ===
 
=== <tt>For Each</tt> ===
 
Med <tt>For Each...Next</tt> kan en behandle alle elementer i en liste, som i
 
Med <tt>For Each...Next</tt> kan en behandle alle elementer i en liste, som i
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim a(3,4) as String
 
Dim a(3,4) as String
 
...
 
...
Line 52: Line 52:
 
   ...
 
   ...
 
Next i
 
Next i
</source>
+
</syntaxhighlight>
 
Listen har 4*5=20 element og det blir da 20 gjentakelser.
 
Listen har 4*5=20 element og det blir da 20 gjentakelser.
 
Variabel "ting" er det gjeldende sted i tabellen.
 
Variabel "ting" er det gjeldende sted i tabellen.
Line 62: Line 62:
 
<ol class="task">
 
<ol class="task">
 
<li>Med <tt>Do While...Loop</tt> som i:
 
<li>Med <tt>Do While...Loop</tt> som i:
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Do While A > 10
 
Do While A > 10
 
   ...
 
   ...
 
Loop
 
Loop
</source>
+
</syntaxhighlight>
 
gjentas blokken inntil A er under 10.</li>
 
gjentas blokken inntil A er under 10.</li>
 
<li>Med <tt>Do Until...Loop</tt>, som i
 
<li>Med <tt>Do Until...Loop</tt>, som i
Line 73: Line 73:
 
   ...
 
   ...
 
Loop
 
Loop
</source>
+
</syntaxhighlight>
 
gjentas blokken inntil A overstiger 10.</li>
 
gjentas blokken inntil A overstiger 10.</li>
 
<li>Med <tt>Do...Loop While</tt> som i
 
<li>Med <tt>Do...Loop While</tt> som i
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Do
 
Do
 
   ...
 
   ...
 
Loop While A > 10
 
Loop While A > 10
</source>
+
</syntaxhighlight>
 
blir betingelsen sjekke ETTER at blokken er eksekvert, og  
 
blir betingelsen sjekke ETTER at blokken er eksekvert, og  
 
gjentakelsen avbrutt hvis A er 10 eller mindre.
 
gjentakelsen avbrutt hvis A er 10 eller mindre.
 
</li>
 
</li>
 
<li>Med <tt>Do...Loop Until</tt>, som i
 
<li>Med <tt>Do...Loop Until</tt>, som i
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Do
 
Do
 
   ...
 
   ...
 
Loop Until A > 10
 
Loop Until A > 10
</source>
+
</syntaxhighlight>
 
er det som over, men betingelsen for fortsettelse er at A er under 10.</li>
 
er det som over, men betingelsen for fortsettelse er at A er under 10.</li>
 
</ol>
 
</ol>
 
Prematurt avbrudd skjer med <tt>Exit Do</tt>, som f.eks. i
 
Prematurt avbrudd skjer med <tt>Exit Do</tt>, som f.eks. i
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Do  
 
Do  
 
   If A = 4 Then
 
   If A = 4 Then
Line 100: Line 100:
 
   ...
 
   ...
 
Loop While A > 10
 
Loop While A > 10
</source>
+
</syntaxhighlight>
 
=== <tt>While...Wend</tt> ===
 
=== <tt>While...Wend</tt> ===
 
Med <tt>While...Wend</tt> vil omtrent det samme skje, men man har ikke noen  <tt>Exit</tt>.
 
Med <tt>While...Wend</tt> vil omtrent det samme skje, men man har ikke noen  <tt>Exit</tt>.
 
To ekvivalente gjentakelser er:
 
To ekvivalente gjentakelser er:
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Do While A > 10
 
Do While A > 10
 
   ...
 
   ...
Line 112: Line 112:
 
   ...
 
   ...
 
Wend
 
Wend
</source>
+
</syntaxhighlight>
  
 
===Evige gjentakelser===
 
===Evige gjentakelser===
 
En evig gjentakelse er kanskje det man vil ha.  Den har ingen sluttbetingelse, eller
 
En evig gjentakelse er kanskje det man vil ha.  Den har ingen sluttbetingelse, eller
 
en sluttbetingelse som aldri blir sann.  
 
en sluttbetingelse som aldri blir sann.  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Do  
 
Do  
 
   ...
 
   ...
Line 130: Line 130:
 
   i = 1
 
   i = 1
 
Next i
 
Next i
</source>
+
</syntaxhighlight>
 
En kan jo legge inn prematurt avbrudd hvis det trengs.
 
En kan jo legge inn prematurt avbrudd hvis det trengs.
 
===Sortering===
 
===Sortering===
Line 137: Line 137:
 
der den minste verdien vil "boble" frem til siste plass i tabellen.
 
der den minste verdien vil "boble" frem til siste plass i tabellen.
 
Den bruker "nested" gjentakelse, en inni en annen.
 
Den bruker "nested" gjentakelse, en inni en annen.
<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 170: Line 170:
  
 
End Sub
 
End Sub
</source>
+
</syntaxhighlight>
 
Les mer om [http://en.wikipedia.org/wiki/Bubble_sort Boblesortering].
 
Les mer om [http://en.wikipedia.org/wiki/Bubble_sort Boblesortering].
 
   
 
   
 
{{InterWiki Languages BasicGuide|articletitle=NO/Documentation/BASIC Guide/Loops}}
 
{{InterWiki Languages BasicGuide|articletitle=NO/Documentation/BASIC Guide/Loops}}
 
{{PDL1}}
 
{{PDL1}}

Latest revision as of 11:04, 25 May 2025


En kodeblokk kan gjentas flere ganger, i det man kaller løkker eller iterasjoner.

For Next

Med For...Next er antallet bestemt ved hjelp av en teller med start- og sluttverdi (og, hvis en vil, en stegverdi). Ofte brukes navnene i, j og k som tellere, som under der i antar verdiene 1, 2, 3, 4 og 5 (fem iterasjoner):

For i = 1 To 5
  ...
Next i

Det siste som skjer i kodeblokken er implisitt, at telleren inkrementeres med stegverdien. Vil en ha annen stegverdi enn 1 (en) brukes "step". I eksempelet under brukes desimaltall i stegverdi og i yttergrensene.

For temp = -2.3 to 14.7 step 3.2
  ...
Next temp

Her blir "temp" -2.3, 0.9, 4.1, 7.3, 10.5, 13.7. I siste iterasjon blir verdien 16.9 som er mer enn yttergrensen 14.7, og gjentakelsene avbrytes da. Kodeblokken ble da eksekvert 6 ganger. Alle slags tallverdier er tillatt som stegverdi og yttergrenser.

Vil en bryte ut prematurt brukes "Exit for" som i:

For I = 1 To 10 
  If I = 5 Then 
    Exit For
  End If
  ...
Next I

For Each

Med For Each...Next kan en behandle alle elementer i en liste, som i

Dim a(3,4) as String
...
For Each ting In a()
  ...
Next i

Listen har 4*5=20 element og det blir da 20 gjentakelser. Variabel "ting" er det gjeldende sted i tabellen.

Do...Loop

Med Do...Loop gjentas blokken inntil en betingelse (med boolsk type) inntreffer. Fire variasjoner finnes.

  1. Med Do While...Loop som i:
    Do While A > 10
       ...
    Loop
    
    gjentas blokken inntil A er under 10.
  2. Med Do Until...Loop, som i <source lang="oobas"> Do Until A > 10 ... Loop </syntaxhighlight> gjentas blokken inntil A overstiger 10.
  3. Med Do...Loop While som i
    Do
      ...
    Loop While A > 10
    

    blir betingelsen sjekke ETTER at blokken er eksekvert, og gjentakelsen avbrutt hvis A er 10 eller mindre.

  4. Med Do...Loop Until, som i
    Do
      ...
    Loop Until A > 10
    
    er det som over, men betingelsen for fortsettelse er at A er under 10.

Prematurt avbrudd skjer med Exit Do, som f.eks. i

Do 
  If A = 4 Then
    Exit Do
  End If
  ...
Loop While A > 10

While...Wend

Med While...Wend vil omtrent det samme skje, men man har ikke noen Exit. To ekvivalente gjentakelser er:

Do While A > 10
   ...
Loop

While A > 10
   ...
Wend

Evige gjentakelser

En evig gjentakelse er kanskje det man vil ha. Den har ingen sluttbetingelse, eller en sluttbetingelse som aldri blir sann.

Do 
  ...
Loop

Do While 2 = 3
  ...
Loop

For i = 1 to 10
  ...
  i = 1
Next i

En kan jo legge inn prematurt avbrudd hvis det trengs.

Sortering

Et eksempel, litt avansert, er sortering. Under er en algoritme (et program) for boblesortering, der den minste verdien vil "boble" frem til siste plass i tabellen. Den bruker "nested" gjentakelse, en inni en annen.

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

Les mer om Boblesortering.


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



Personal tools