Ciklusok
A ciklus a megadott alkalommal hajtja végre az adott kódrészletet. A ciklusokat létrehozhatjuk úgy is, hogy nincs megadva, hányszor fussanak le.
For...Next
A For...Next ciklus adott számú végrehajtást végez. A ciklusszámláló adja meg azt a számot, ahányszor a ciklusnak le kell futnia. A következő példában az I a ciklusszámláló, amelynek kezdeti értéke 1. A számláló minden menetben eggyel nő. Amikor az I változó értéke 10 lesz, akkor a ciklus megáll.
Dim I
For I = 1 To 10
' ... Ciklusmag
Next I
Ha a ciklusváltozót nem eggyel akarjuk növelni, használjuk a Step utasítást:
Dim I
For I = 1 To 10 Step 0.5
' ... Ciklusmag
Next I
Az előző példában a számláló értéke minden menet végén 0.5-tel nő, és a ciklus 19-szer lesz végrehajtva.
Használhatunk negatív lépést is.
Dim I
For I = 10 To 1 Step -1
' ... Ciklusmag
Next I
Ebben a példában a számláló 10-től kezd számlálni, és eggyel csökken minden menet végén, amíg értéke 1 nem lesz.
Az Exit For utasítással kiléphetünk a For ciklusból. A következő példában a ciklus az ötödik menetben megszakad:
Dim I
For I = 1 To 10
If I = 5 Then
Exit For
End If
' ... Ciklusmag
Next I
For Each
A VBA For Each...Next ciklusvariánsa támogatott az Apache OpenOffice Basicben. A For Each ciklusok nem explicit ciklusszámlálót használnak, mint a For...Next ciklus. A For Each ciklus azt jelenti, hogy „csináld meg ezt a halmaz minden elemére”, nem pedig azt, hogy „csináld meg ezt n-szer”. Például:
Const d1 = 2
Const d2 = 3
Const d3 = 2
Dim i
Dim a(d1, d2, d3)
For Each i In a()
' ... Ciklusmag
Next i
Ez a ciklus 36-szor fog végrehajtódni.
Do...Loop
A Do...Loop ciklusban nem rögzített a menetek száma. Ehelyett a Do...Loop ciklust addig hajtja végre a program, amíg egy adott feltétel nem teljesül. A Do...Loop ciklusnak négy változata van. Az első két példában a ciklusmag esetleg egyszer sem hajtódik végre (elöl tesztelő logika). A későbbi példákban a kód legalább egyszer végrehajtódik. (A következő példákban az A > 10 bármilyen feltétel lehet):
- A Do While...Loop változat
ellenőrzi minden menet előtt, hogy a While utáni feltétel teljesül-e, és csak ha igen, akkor hajtja végre a ciklusmagot.
Do While A > 10 ' ... ciklusmag Loop
- A Do Until...Loop változat
addig hajtja végre a ciklusmagot, amíg az Until utáni feltétel hamis.
Do Until A > 10 ' ... ciklusmag Loop
- A Do...Loop While változat
csak azután ellenőrzi a feltételt, miután egyszer végrehajtotta a ciklusmagot, és befejeződik, ha a While utáni feltétel hamis.
Do ' ... ciklusmag Loop While A > 10
- A Do...Loop Until változat
szintén csak azután ellenőrzi a feltételt, miután egyszer végrehajtotta a ciklusmagot, és befejeződik, ha az Until utáni feltétel igaz.
Do ' ... ciklusmag Loop Until A > 10
Ahogy a For...Next ciklusban, úgy a Do...Loop ciklusban is van befejező parancs. Az Exit Do parancs a ciklus bármelyik pontján kilép a ciklusból.
Do
If A = 4 Then
Exit Do
End If
' ... ciklusmag
Loop While A > 10
While...Wend
A While...Wend ciklus pontosan ugyanúgy működik, mint a Do While...Loop, de az a hátránya, hogy nincs hozzá Exit parancs. A következő két ciklus azonos eredményt ad:
Do While A > 10
' ... ciklusmag
Loop
While A > 10
' ... ciklusmag
Wend
Programozási példa: Rendezés egymásba ágyazott ciklusokkal
A ciklusok sok mindenre használhatók, például listák végignézéséhez, értékek visszaadásához vagy bonyolult matematikai feladatok végrehajtásához. A következő példa egy algoritmus, amely egy nevekből álló listát rendez két ciklus segítségével.
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
A program a neveket addig cserélgeti páronként, amíg végül növekvő sorrendben lesznek rendezve. Akárcsak a buborékok, a nevek fokozatosan a helyükre mozognak. Éppen ezért ezt az algoritmust buborékrendezésnek hívják.
| Content on this page is licensed under the Public Documentation License (PDL). |