Wyjazdy studenckie

Strona główna - VISUAL BASIC-informacje - Wstęp - Śrowowisko Visual Basic 6.0 - Kontrolki - Elementy języka - Zmienne i stałe - Instrukcja przypisania - Wyrażenia arytmetyczne - Wyrażenia logiczne - Wyrażenia łańcuchowe - Operacje na datach - Podejmownie decyzji - Pętle - Tablice - Procedury - Funkcje - Zapisywanie do pliku -
Odczytywanie danych z pliku - Znajdowanie błędów


Pętle For ... Next | Pętle Do While |

Pętle


Główną zaletą komputera jest to, że nie męczy się i nie nuży i bez zmrużenia oka może wykonać nawet 1000 razy to samo proste zadanie lub kolejne zadania bardzo do siebie podobne. Aby uniknąć jednak zapisania tego zadania 1000 razy w treści programu, który komputer będzie wykonywać, we wszystkich językach programowania zaprojektowane są specjalnie nowe kontrukcje służące do zwartego zapisania powtarzających się czynności. Kontrukcje te to pętle.

W Visual Basicu programista ma do dyspozycji dwa typy pętli: pętle z licznikiem For ... Next oraz pętle warunkowe Do While oraz Do Until.

>Pętle For ... Next

Pętla For ... Next ma następującą postać:

For licznik=pocz to koniec Step krok
   Instrukcje powtarzane
Next licznik

lub

For licznik=pocz to koniec
   Instrukcje powtarzane
Next licznik


Drugiej wersji używa się wtedy, gdy krok pętli jest równy jeden.

Kontruując pętle For ... Next należy na wstępie określić zmienną sterującą tą pętlą (w naszym przypadku jest nią zmienna o nazwie licznik) oraz zdefiniować zakres w jakim ta zmienna będzie się zmieniała, czyli jej wartość początkową, pocz, jej wartość końcową, koniec, oraz krok z jakim ta zmienna będzie się zwiększała przy każdym dojściu do końca pętli, czyli do intrukcji Nexzt.

Podczas wykonywania pętli za pierwszym razem, pod zmienną sterującą licznik podstawiona jest wartość początkowa, pocz. Następnie sprawdzany jest warunek, czy wyznaczona w ten sposób zmienna licznik ma wartość mniejszą lub równą niż koniec. Jeśli warunek jest ten jest spełniony to pętla jest wykonywana, czyli wykonywane instrukcje zawarte pomiędzy wierszem For licznik=pocz to koniec, a wierszem Next licznik.

Po dojściu do wiersza Next licznik wartość zmiennej licznik zwiększana jest o wartość zmiennej krok (czyli wykonywana jest instrukcja przypisania licznik = licznik + krok), a następnie sterowanie programu przenoszone jest do początkowego wiersza pętli, czyli For licznik=pocz to koniec, w którym sprawdzany jest warunek czy obliczona wartość zmiennej licznik jest mniejsza lub równa od wartości zmiennej koniec. Jeśli warunek ten jest spełniony to pętla (czyli intrukcje znajdujące się do wiersza Next licznik) wykonywana jest następny raz, zwiększany jest licznik o wartość zmiennej krok i historia powtarza się tak długo, dopóki warunek licznik <= koniec będzie spełniony. W przeciwnym przypadku, tzn. gdy licznik > koniec, pętla przestanie być wykonywana (w szczególności może nie być wykonywana ani razu, gdy już przy pierwszym porównaniu warunek ten nie jest spełniony, tzn. gdy pocz > koniec), a program przejdzie do wykonywania instrukcji następującej po wierszu Next licznik.

Przykład 21

Wyświetlenie dziesięciu kolejnych wartości zmiennej licznik.

Dim i As Integer

For i = 1 to 10
 MsgBox "Wartość licznika " & Cstr(i)
Next i


Uwaga: w przykładzie tym wykorzystaliśmy funkcję Cstr konwersji zmiennej liczbowej na tekst.


Powyższy opis intrukcji For ... Next dotyczył przypadku, gdy krok był liczbą dodatnią, zatem zmienna stejąca licznik zwiększała się w każdym przebiegu pętli aż do największej akceptowanej wartości czyli wartości koniec. Dopuszczalna jest jednak sytuacja, gdy zmienna sterująca zmniejsza się w każdym przebiegu pętli, od początkowej dużej wartości do wartości końcowej małej. W tym przypadku należy zastosować krok ujemny, np. -1.

Przykład 22

Odliczanie staru rakiety

Dim i As Integer

For i = 10 to 1 step -1
 MsgBox "Pozostało " & Cstr(i)
Next i
MsgBox "Start"


Normalnie, czyli zgodnie z planem wykonanie pętli For ... Next można zakłócić w wyjątkowych przypadkach przerywając działanie pętli za pomocą instrukcji Exit For. Instrukcja ta służy do awaryjnego przerwania działania pętli, umieszczana jest zatem stosunkowo rzadko, a jeśli już to umieszcza się ją w jakiejś intrukcji waurnkowej If Then.

Przykład 23

Zgadywanka w 10 próbach

Dim i, sekret, strzal As Integer

sekret = InputBox ("Wprowadzam sekretną liczbę")
MsgBox "W 10 próbach zgadnij moją sekretną liczbę"
For i = 1 to 10
 MsgBox "Próba nr " & Cstr(i)
 strzal = InputBox ("Zgaduj")
 If strzal = sekret Then
  MsgBox "Brawo. Trafiłeś w " & Cstr(i) & " próbie."
  Exit For
 End If
Next i


Ćwiczenie 11
Zaprogramować formularz realizujący zgadywankę z przykładu 24.

Formularz będzie bardzo prosty i będzie zawierał jedynie pola etykiety tytułu, komentarzy wynikowych oraz dwa przyciski poleceń: btn_start, rozpoczynający zgadywankę i btn_koniec, umożliwiający zakończenie programu. Może on mieć następującą postać:

Formularz zgadywanki z przykładu 24

W kodzie realizującym to zadanie przewiduje się, że do wprowadzenia sekretnej liczby oraz kolejnych prób odgadnięcia będziemy używali formularza InputBox. Informacja o kolejnej próbie będzie pojawiała się na formularzu głównym w formie pola etykiety lbl_proba, natomiast wynik trafienia będzie komentowany w innym polu etykiety (lbl_pudlo). Próba odgadnięcia będzie powtarzana co najwyżej 10 razy, przy czym jeśli sekret zostanie odgadnięty wcześniej, to pętla zostanie przerwana instrukcją Exit For. Zatem kod może mieć postać:

Private Sub btn_koniec_Click()
Unload Me
End Sub

Private Sub btn_start_Click()
Dim i, sekret, strzal As Integer
'Wprowadzenie danej
  sekret = InputBox("Wprowadzam sekretną liczbę")
  lbl_poczatek.Caption = "W 10 próbach zgadnij moją seretną liczbę"

'Początek pętli o kroku 1
For i = 1 To 10

'Zapis numeru próby
  lbl_proba.Caption = "Próba nr " & CStr(i)
  strzal = InputBox("Zgaduj")
  If strzal = sekret Then
'jeśli strzal=sekret to wyświetl komunikat radości
    lbl_pudlo.Caption = "Brawo. Trafiłeś w " & CStr(i) & " próbie"
    Exit For
  Else
'wyświetl komunikat żalu
    lbl_pudlo.Caption = "Pudło!!!"
  End If
'Powrót do początku
Next i

If i > 10 Then
 lbl_pudlo.Caption = "Nie trafiłeś w 10 próbach. Przegrałeś"
End If

End Sub


>Pętle Do While

Pętla Do While ma następującą postać:

Do While warunek
   Intrukcje powtarzane
Loop

gdzie warunek jest dowolnym wyrażeniem logicznym (np. i<10). Jeśli wartość tego wyrażenia jest równa True, czyli warunek jest spełniony, to intrukcje w pętli są wykonywane.

Pod ojściu do intrukcji Loop sterowanie wraca do początkwej instrukcji pętli, Do While warunek i ponownie sprawdzany jest warunek. Jeśli w dalszym ciągu jest on spełniony (tzn. ma wartość True), to instrukcje wewnątrz pętli są wykonywane ponownie i po dojściu do końca pętli sterowanie ponownie wraca do początku, warunek jest sprawdzany its. Jeśli warunek nie jest spełniony to wykonywana jest instrukcja następna po wierszu Loop. Zatem pętla Do While wykonywana jest tak długo dopóki warunek ma wartość True.

Ważna uwaga: aby uniknąć nieskończonych pętli wartość warunku musi mieć możliwość zmiany wewnątrz pętli z wartości True na wartość False.