Difference between revisions of "NO/Documentation/BASIC Guide/Loops"
(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): | ||
| − | < | + | <syntaxhighlight lang="oobas"> |
For i = 1 To 5 | For i = 1 To 5 | ||
... | ... | ||
Next i | Next i | ||
| − | </ | + | </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. | ||
| − | < | + | <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 | ||
| − | </ | + | </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: | ||
| − | < | + | <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 | ||
| − | </ | + | </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 | ||
| − | < | + | <syntaxhighlight lang="oobas"> |
Dim a(3,4) as String | Dim a(3,4) as String | ||
... | ... | ||
| Line 52: | Line 52: | ||
... | ... | ||
Next i | Next i | ||
| − | </ | + | </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: | ||
| − | < | + | <syntaxhighlight lang="oobas"> |
Do While A > 10 | Do While A > 10 | ||
... | ... | ||
Loop | Loop | ||
| − | </ | + | </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 | ||
| − | </ | + | </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 | ||
| − | < | + | <syntaxhighlight lang="oobas"> |
Do | Do | ||
... | ... | ||
Loop While A > 10 | Loop While A > 10 | ||
| − | </ | + | </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 | ||
| − | < | + | <syntaxhighlight lang="oobas"> |
Do | Do | ||
... | ... | ||
Loop Until A > 10 | Loop Until A > 10 | ||
| − | </ | + | </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 | ||
| − | < | + | <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 | ||
| − | </ | + | </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: | ||
| − | < | + | <syntaxhighlight lang="oobas"> |
Do While A > 10 | Do While A > 10 | ||
... | ... | ||
| Line 112: | Line 112: | ||
... | ... | ||
Wend | Wend | ||
| − | </ | + | </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. | ||
| − | < | + | <syntaxhighlight lang="oobas"> |
Do | Do | ||
... | ... | ||
| Line 130: | Line 130: | ||
i = 1 | i = 1 | ||
Next i | Next i | ||
| − | </ | + | </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. | ||
| − | < | + | <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 | ||
| − | </ | + | </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.
- Med Do While...Loop som i:
gjentas blokken inntil A er under 10.
Do While A > 10 ... Loop
- Med Do Until...Loop, som i <source lang="oobas"> Do Until A > 10 ... Loop </syntaxhighlight> gjentas blokken inntil A overstiger 10.
- 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). |