Pętle instrukcje powtórzeo Pętle - zbiór instrukcji, które należy wykonad wielokrotnie. Program dyktuje: - ile razy pętla ta wykona zawarty w niej blok instrukcji - jakie mają byd warunki zakooczenia jej działania.
Rodzaje instrukcji pętli w VBA W Visual Basic istnieje kilka rodzajów pętli. Do While Loop Do Loop While Do Until Loop Do Loop Until For Do Next Do przerwania działania pętli służą instrukcje: Exit Do Exit For
Rodzaje instrukcji pętli w VBA Pętla typu Do While wykonuje zawarty w niej blok instrukcji dopóki wyrażenie porównania jest prawdziwe. Pętla typu Do Until kontynuuje swoje działanie tak długo, jak długo podany warunek jest fałszywy. Pętla For wykonuje swoje działanie dopóki zmienna o podanej wartości początkowej nie osiągnie podanej wartości koocowej. Ta pętla jest najczęściej wykorzystywana, gdy znana jest wymagana liczba powtórzeo.
pętle o znanej liczbie powtórzeo For o nieznanej liczbie powtórzeo Do While Do Until
Pętla typu Do While Wymaga zastosowania wyrażenia porównania. Wykorzystuje do tego celu operatory porównania. Jest ograniczona słowami kluczowymi Do i Loop. W ciele pętli może znajdowad się jedna instrukcja lub cały blok instrukcji VB. Blok ten jest wykonywany tak długo jak długo podany warunek jest prawdziwy.
Pętla typu Do While Ważne: w ciele pętli muszą znaleźd się instrukcje, które sprawią, że podany warunek kiedyś stanie się fałszywy! W przeciwnym razie pętla się nie zakooczy! Składnia instrukcji Do While: Do While (Warunek) Blok instrukcji VB wykonywany gdy Warunek jest prawdziwy Loop
Pętla typu Do While Jeżeli warunek jest fałszywy już na samym początku przed wykonaniem pętli, to blok instrukcji w ciele pętli nie zostanie wykonany ani razu. Nieco inaczej działa pętla Do...Loop While, której ciało jest zawsze wykonywane przynajmniej jeden raz. Najczęściej w Warunku pętli wykorzystywana jest jakaś zmienna. Wartośd tej zmiennej w ciele pętli musi się zmieniad, aby doprowadzid do fałszywości Warunku i zakooczyd działanie pętli.
Przykład 1: Fragment programu żąda wczytania danych z określonego zakresu Sub blokowanie_danych() liczba = 0 Do While liczba < 1 Or liczba > 100 podczas, gdy liczba wczytywana jest spoza żądanego przedziału liczba = InputBox("Podaj liczbę z przedziału 1..100") Loop End Sub Uwaga! Taki fragment umieszcza się często na początku programu, żeby wymusid wczytanie odpowiednich danych
Przykład 2: program oblicza n-tą sumę szeregu: Sub Suma_While() Dim n As Byte Dim su As Single su = 0 inicjowanie zmiennych li = 1 mia = 1 i = 1 n = InputBox("Ile wyrazów dodad? ") Do While i <= n początek pętli su = su + li / mia li = li + 1 mia = mia + 2 i = i + 1 zwiększanie licznika dodanych wyrazów sumy; bez tego pętla nieskooczona Loop MsgBox "Suma szeregu dla " & n & " wynosi " & su End Sub su 0 1 1+2/3 1+2/3+3/5 =1+2/3+3/5+4/7 li 1 2 3 4 5 mia 1 3 5 7 9 i 1 2 3 4 5 n=4
Przykład 3: symulacja rzutu kostką Sub Rzut_kostką() Randomize procedura ta powoduje, że fcja losowania, użyta w tym programie, będzie generowad zbiór liczb rzeczywiście losowych; należy ją wywoład tylko raz, przed użyciem fcji losowania ile_oczek = Int(Rnd * 6) + 1 fcja Rnd, bez parametru, losuje liczbę rzeczywistą z przedziału <0,1) fcja Int zwraca częśd całkowitą podanej liczby; zaokrągla ją do najbliższej liczby całkowitej, mniejszej od podanej liczby MsgBox "Wyrzuciłeś " & ile_oczek i = 1 Do ile_oczek = Int(Rnd * 6) + 1 i = i + 1 MsgBox "Wyrzuciłeś " & ile_oczek Loop While ile_oczek <> 6 MsgBox "Szóstka padła po " & i - 1 & " rzutach" End Sub
Pętla typu Do Until Pętla Do Until wykonuje zawarty w niej blok rozkazów tak długo, jak długo podany warunek jest fałszywy. Wymaga ona zastosowania wyrażenia porównania. Wykorzystuje do tego celu operatory porównania. Pętla te jest ograniczona słowami kluczowymi Do i Loop. W ciele pętli może znajdowad się jedna instrukcja lub cały blok instrukcji VB.
Pętla typu Do Until Ważne: w ciele pętli muszą znaleźd się instrukcje, które doprowadzą do tego, że podany warunek kiedyś stanie się prawdziwy. W przeciwnym razie pętla się nie zakooczy! Składnia instrukcji Do Until: Do Until (Warunek) Blok instrukcji VB wykonywany gdy Warunek jest fałszywy Loop
Pętla typu Do Until Jeżeli warunek jest prawdziwy już na samym początku przed wykonaniem pętli, to blok instrukcji w ciele pętli nie zostanie wykonany ani razu. Nieco inaczej działa pętla Do...Loop Until, której ciało jest zawsze wykonywane przynajmniej jeden raz. Najczęściej w Warunku pętli wykorzystywana jest jakaś zmienna. Należy zadbad, aby w ciele pętli wartośd tej zmiennej zmieniała się, aby doprowadzid do prawdziwości Warunku i zakooczyd działanie pętli.
Przykład 1: wymuszanie poprawnych danych Sub wymuszanie_danych() Do liczba = InputBox("Podaj liczbę z przedziału 1..100") Loop Until liczba >= 1 And liczba <= 100 tu warunek odwrotny do warunku z przykładu z instrukcją While, napisany zgodnie z logicznymi prawami de Morgana End Sub
Przykład 2: program oblicza n-tą sumę szeregu: Sub Suma_Until() Dim n As Byte Dim su As Single su = 0 li = 0 mia = -1 i = 1 n = InputBox("Ile wyrazów dodad? ") Do li = li + 1 mia = mia + 2 su = su + li / mia i = i + 1 Loop Until i > n MsgBox "Suma szeregu dla " & n & " wynosi " & su End Sub
Przykład 3: program oblicza liczbę szereg: z rozwinięcia w Sub pi() Dim pi As Single Cells.Clear eps = 0.0000000000001 dokładnośd, z jaką chcemy policzyd liczbę s = 0 i = 1 wyr = 1 / i - 1 / (i + 2) s = s + wyr Do Until wyr < eps i = i + 4 wyr = 1 / i - 1 / (i + 2) s = s + wyr Loop pi = 4 * s MsgBox "pi=" & pi End Sub
Instrukcja Exit Do Exit Do instrukcja pozwalająca na przerwanie działania pętli. Powoduje natychmiastowe przerwanie działania pętli, bez względu na prawdziwośd podanego warunku. Składnia instrukcji Exit Do: Exit Do Instrukcja Exit Do przeważnie poprzedzona jest instrukcją warunkową (najczęściej If) i powoduje przejście do rozkazu znajdującego się bezpośrednio za pętlą.
Instrukcja Exit Do Przykład użycia instrukcji Exit Do: Do intliczba=inputbox("podaj liczbę całkowitą ) if (intliczba=intstala) Then Exit Do End If Wynik=1/(intStala-intLiczba) intwiadomosc=msgbox(wynik) Loop While (intliczba>0)
Instrukcja pętli For Do Next Pozwala na wielokrotne powtarzanie bloku kodu. W przeciwieostwie do pętli typu Do wykonuje to ściśle określoną ilośd razy. Powtórzenia pętli zwane są iteracjami pętli.
Instrukcja pętli For Do Next Składnia instrukcji For: For ZmiennaLicznik = WartośćPoczątkowa To WartośćKońcowa [Step WartośćKroku] Blok instrukcji VB wykonywany gdy ZmiennaLicznik <= WartośćKońcowa (jeżeli WartośćKroku jest dodatnia), lub gdy ZmiennaLicznik>= WartośćKońcowa (gdy WartośdKroku jest ujemna) Next [ZmiennaLicznik]
Instrukcja pętli For Do Next Wyrażenia w nawiasach *+ są opcjonalne, tzn. nie muszą występowad w instrukcji. W przypadku, gdy pominięta zostanie częśd rozkazu określająca WartośćKroku, Visual Basic przyjmie domyślną WartośdKroku=1. Wpisywanie ZmiennejLicznik za słowem Next nie jest konieczne, jednak poprawia czytelnośd i analizę zapisu, szczególnie przy zagnieżdżonych instrukcjach For.
Instrukcja pętli For Do Next Przykład użycia instrukcji For: Co robi ten kawałek programu? intsuma=0 For intlicznik=2 To 100 Step 2 intsuma=intsuma+intlicznik Next intlicznik Nie należy zmieniad wartości ZmiennejLicznik wewnątrz bloku rozkazów pętli For. Może to doprowadzid do powstania pętli nieskooczonej ("zapętlenia" się programu), gdyż ZmiennaLicznik nigdy nie osiągnie WartościKoocowej. Przykład powstania pętli nieskooczonej: For intlicznik=2 To 100 Step 2 intlicznik=6 Next intlicznik
Instrukcja Exit For Exit For umożliwia opuszczenie pętli przed zakooczeniem jej działania. Powoduje natychmiastowe przerwanie działania pętli, bez względu na to ile iteracji zostało wykonane i ile pozostało do wykonania. Przykład użycia instrukcji Exit For: For intlicznik=1 To 10 if (intliczba=intlicznik) Then Exit For End If sngwynik=1/(intlicznik-intliczba) intwiadomosc=msgbox(sngwynik) Next intlicznik
Przykład 1: program oblicza n-tą sumę szeregu: Sub Suma_Szer_For() Dim n As Byte su = 0 li = 1 mia = 1 n = InputBox("Ile wyrazów chcesz dodad? ") For i = 1 To n tu instrukcja For sama pilnuje ilości kroków su = su + li / Mia li = li + 1 mia = mia + 2 Next i MsgBox "Suma szer przy użyciu For=" & su End Sub
Przykład 2: program szuka największego i najmniejszego elementu w ciągu n liczb, wygenerowanych funkcją losowania Sub Max_Min() Dim n As Byte n = InputBox("Ile wyrazów ma zawierad ciąg?") Max = 0 min = 100 'Generowanie losowe liczb rzeczywistych z przedziału 0..100 For i = 1 To n liczba = Rnd * 100 If liczba > Max Then Max = liczba ElseIf liczba < min Then min = liczba End If Next i MsgBox "Max=" & Max & " min=" & min End Sub