Gjentakelser

From Apache OpenOffice Wiki
Jump to: navigation, search


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
    Do Until A > 10
      ...
    Loop
    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