Gjentakelser
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.
- Med Do While...Loop som i:
gjentas blokken inntil A er under 10.
Do While A > 10 ... Loop
- Med Do Until...Loop, som i
gjentas blokken inntil A overstiger 10.
Do Until A > 10 ... Loop
- 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.
- Med Do...Loop Until, som i
er det som over, men betingelsen for fortsettelse er at A er under 10.
Do ... Loop Until A > 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). |