Ciklusok

From Apache OpenOffice Wiki
Jump to: navigation, search
Book.png


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

  1. A Do While...Loop változat
    Do While A > 10
       ' ... ciklusmag
    Loop
    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.
  2. A Do Until...Loop változat
    Do Until A > 10
      ' ... ciklusmag
    Loop
    addig hajtja végre a ciklusmagot, amíg az Until utáni feltétel hamis.
  3. A Do...Loop While változat
    Do
      ' ... ciklusmag
    Loop While A > 10
    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.
  4. A Do...Loop Until változat
    Do
      ' ... ciklusmag
    Loop Until A > 10
    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.

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