Przejdź do zawartości

Visual Basic/Pętle i instrukcje warunkowe

Z Wikibooks, biblioteki wolnych podręczników.

Często przy programowaniu zdarza się, iż trzeba wykonać jakiś kod kilka razy. Wpisywanie kilka razy tego samego jest niewydajne i niewygodne, szczególnie gdy trzeba będzie np. zmienić nazwę zmiennej w każdej linijce powielonego kodu.

Definicja pętli

[edytuj]

Czym jest pętla?

[edytuj]

Pętla, jest to jak sama nazwa wskazuje, blok kodu, który zależnie od postawionego warunku, wykonuje się więcej niż jeden raz. Dodatkowo, wykonując kod może zwiększać tzw. iterator, czyli licznik wykonań kodu w pętli, pozwalając przykładowo na wypisanie liczb od 1 do 20.

Jest kilka rodzajów pętli. Każda z nich ma różne właściwości, jedna może wykonać się co najmniej raz, inna może ani razu.

Pętla "For...Next"

[edytuj]

Pętla For...Next, to jedna z najłatwiejszych do opanowania pętli. Łączy się również z innymi słowami kluczowymi, tworząc na przykład pętle typu "For Each". Składnia takiej prezentuje się następująco:

For i As Integer = WartośćPoczątkowaZmiennej To WartośćKońcowaZmiennej

W ten sposób, możemy już napisać prosty program, generujący liczby od 1 do 20.

        For i As Byte = 1 To 20
            ' Tutaj wprowadzam już do użycia operator "&"
            ' Łączy on dwie wartości konwertując obie na String
            Console.Write(i & ", ")
        Next
        Console.WriteLine("Koniec pętli")
        Console.ReadKey()

Pętla "Do...Loop Until"

[edytuj]

Do...Loop Until różni się tym od For...Next, iż nie używa ona zmiennej, a warunek podawany jest na końcu, dzięki czemu pętla niezależnie od warunku wykona się przynajmniej jeden raz. Tak więc ten sam algorytm pisany używając tej pętli wygląda znacznie inaczej.

        Dim i As Byte
        Do
            i = i + 1
            Console.Write(i & ", ")
        Loop Until i = 20
        Console.WriteLine("Koniec pętli")
        Console.ReadKey()

Pętla "Do While...Loop"

[edytuj]

Ta pętla powtarza kod dopóty warunek jest spełniony. Jest odmienna od For...Next jedynie tym, że ta pętla sama nie tworzy zmiennej, tylko sprawdza warunek - więc można ją wykonywać do czasu np. naciśnięcia klawisza przez użytkownika. Implementacja algorytmu wyświetlania liczb przedstawia się następująco:

        Dim i As Byte
        Do While i < 20
            i = i + 1
            Console.Write(i & ", ")
        Loop
        Console.WriteLine("Koniec pętli")
        Console.ReadKey()

For Each

[edytuj]

For Each jest pętlą, którą nie będziemy się zajmować teraz, gdyż operuje tylko na typach danych złożonych, np. listach czy tablicach. Przedstawimy jej praktyczne zastosowanie w następnym rozdziale, gdy będziemy omawiać użycie obiektów.

Instrukcje warunkowe

[edytuj]

Działanie instrukcji warunkowych

[edytuj]

Często program nie będzie działał wciąż prostoliniowo - główną ideą przy tworzeniu wielkich aplikacji jest podejmowanie decyzji przez użytkownika, lub wykonywanie czegoś gdy jakiś warunek jest spełniony. Tym zajmują się właśnie instrukcje warunkowe - stanowią blok kodu który zostanie wykonany tylko gdy określony warunek jest spełniony.

Aby rozpocząć blok instrukcji warunkowej, należy zapisać słowo kluczowe If, następnie podać warunek do spełnienia, a potem dopisać Then. Całość powinna wyglądać tak:

        If WARUNEK Then
        ' [Instrukcja do wykonania gdy warunek jest spełniony]
        Else
        ' [Instrukcja do wykonania gdy warunek nie jest spełniony]
        End If

W ten sposób możemy już pozwolić użytkownikowi decydować o tym co chce robić.

    Sub Main()
        Dim Odpowiedź As String
        Console.Write("Wpisz 0 aby wyświetlić komunikat, dowolny inny znak aby zakończyć: ")
        Odpowiedź = Console.ReadLine 'Czyta łańcuch znaków z konsoli
        If Odpowiedź = "0" Then
            Console.WriteLine("Wpisałeś 0!")
        Else
            Application.Exit() 'Zakańcza aplikację
        End If
        Console.ReadKey()
    End Sub

Więcej niż dwa warunki

[edytuj]

Czasem przydaje się więcej niż dwa warunki do obsługi. Można oczywiście napisać cały wielki blok If-ów, lecz jest to niewydajne a na dłuższą metę zmniejsza czytelność kodu. Aby dodać dodatkową instrukcję, gdy warunek wyżej nie spełni się, używa się polecenia ElseIf.

        Dim Odpowiedź As String
        Console.Write("Wpisz cyfrę: ")
        Odpowiedź = Console.ReadLine
        If Odpowiedź = 0 Then
            Console.WriteLine("Wpisałeś 0")
        ElseIf Odpowiedź = 1 Then
            Console.WriteLine("Wpisałeś 1")
        ElseIf Odpowiedź = 2 Then
            Console.WriteLine("Wpisałeś 2")
        ElseIf Odpowiedź = 3 Then
            Console.WriteLine("Wpisałeś 3")
        Else
            Console.WriteLine("Wpisałeś coś innego niż 0, 1, 2 lub 3")
        End If
        Console.ReadKey()

Ćwiczenie

[edytuj]

Poniżej zapisany jest kod programu tworzącego w oknie konsoli tabliczkę mnożenia. Zmodyfikuj go tak, aby obok rzędu wypisywał dodatkowo sumę wszystkich wyników w wierszu tabelki. (Rozwiązanie)

    Sub Main()
        Dim Wynik As String
        Console.WriteLine("+--+--+--+--+--+--+--+--+--+--+")
        For i As Byte = 1 To 10
            For j As Byte = 1 To 10
                Wynik = (i * j).ToString
                If Wynik.Length = 1 Then
                    Console.Write("|" + Wynik + " ")
                Else
                    Console.Write("|" + Wynik + "")
                End If
            Next
            Console.WriteLine("|")
            If i < 10 Then
                Console.WriteLine("+--+--+--+--+--+--+--+--+--+--+")
            End If
        Next
        Console.WriteLine("+--+--+--+--+--+--+--+--+--+--+")
        Console.ReadKey()
    End Sub