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). |