Visual Basic 2005/Tingimuslaused

Tingimused

muuda

Programmeerimisel on üldjuhul vaja, et käske täidetaks ainult teatud tingimustel

If...then...else

muuda

See programm küsib kasutajalt kahe kuubi küljepikkused, arvutab ja kuvab seejärel suurema kuubi ruumala. Et aru saada kumb küljepikkus suurem on, kasutatakse if..else lauset.

Module Module1

    Sub Main()
        Dim kuubi_ruumala
        Console.WriteLine("Esimese kuubi küljepikkus ? ")
        Dim a1 As Long = Val(Console.ReadLine)
        Console.WriteLine("Teise kuubi küljepikkus ? ")
        Dim a2 As Long = Val(Console.ReadLine)

        If a1 > a2 Then 'kui esimene küljepikkus on suurem
            'tingimus on tõene, a1 oli suurem
            kuubi_ruumala = a1 ^ 3 
        Else
            'tingimus on väär, a2 oli suurem
            kuubi_ruumala = a2 ^ 3
        End If
        
        Console.WriteLine("Suurema kuubi ruumala on " & kuubi_ruumala & " ühikut.")'väljasta tulemus
        Console.ReadLine()
    End Sub

End Module

See programm küsib kasutajalt kahe kuubi küljepikkused, arvutab ja kuvab seejärel suurema kuubi ruumala. Et aru saada kumb küljepikkus suurem on, kasutatakse if lauset.

Module Module1

    Sub Main()
        Dim kuubi_ruumala
        Console.WriteLine("Esimese kuubi küljepikkus ? ")
        Dim a1 As Long = Val(Console.ReadLine)
        Console.WriteLine("Teise kuubi küljepikkus ? ")
        Dim a2 As Long = Val(Console.ReadLine)

        kuubi_ruumala = IIf(a1 > a2, a1 ^ 3, a2 ^ 3)

        Console.WriteLine("Suurema kuubi ruumala on " & kuubi_ruumala & " ühikut.")
        Console.ReadLine()
    End Sub

End Module

,kuid võimalik on ka

Module Module1

    Sub Main()
        Console.WriteLine("Esimese kuubi küljepikkus ? ")
        Dim a1 As Long = Val(Console.ReadLine)
        Console.WriteLine("Teise kuubi küljepikkus ? ")
        Dim a2 As Long = Val(Console.ReadLine)

        Console.WriteLine("Suurema kuubi ruumala on " & IIf(a1 > a2, a1 ^ 3, a2 ^ 3) & " ühikut.")
        Console.ReadLine()
    End Sub

End Module

select...case

muuda

See programm küsib kasutajalt kahe kuubi küljepikkused, arvutab ja kuvab seejärel suurema kuubi ruumala. Et aru saada kumb küljepikkus suurem on, kasutatakse case lause plokki.

Module Module1

    Sub Main()
        Dim kuubi_ruumala
        Console.WriteLine("Esimese kuubi küljepikkus ? ")
        Dim a1 As Long = Val(Console.ReadLine)
        Console.WriteLine("Teise kuubi küljepikkus ? ")
        Dim a2 As Long = Val(Console.ReadLine)

        Select Case a1
            Case Is > a2
                kuubi_ruumala = a1 ^ 3
            Case Else
                kuubi_ruumala = a2 ^ 3
        End Select

        Console.WriteLine("Suurema kuubi ruumala on " & kuubi_ruumala & " ühikut.")
        Console.ReadLine()
    End Sub

End Module

Vaste puhul täidetav vahetus

muuda

Switch

muuda

Choose

muuda

Tingimuse põhjal täidetav kordus

muuda

Programmeerimisel on üldjuhul vaja, et käske täidetaks ainult seni kui mingi tingimus on täidetud või täitmata jäätud ja korduvalt.Kui kõige alguses õpiti kuidas kuvada teadet Tere Maailm, tekib vahel vajadus taolist protseduuri korrata.

for...next

muuda

Kui me teame enne protseduuri, mitu korda tuleks mingit osa täita, on mugav kasutada For... next kordust. NT: Tuleks kuvada ekraanile teadet "Tere maailm" 10 korda

   Sub Main()
       Dim i
       For i = 1 To 10 'step 1
           Console.WriteLine("Tere Maailm")
       Next i
       Console.ReadLine()
   End Sub

Kommentaarina on lisatud step 1, see on osa mis määrab ära i täitmissuuna. Kui teda ei ole lisatud on tema vaikeväärtuseks step 1 ehk pärast igat next i kordust kasvab i väärtus 1 võrra. Kui i väärtus saab 10 lõpetatakse kordus. Kordusest saab väljuda ka käsuga Exit For, kuid eesmärgipäraselt ei tohiks seda vaja minna. NT2: Tuleks kuvada ekraanile teadet "Tere maailm" korduvalt (a la kinnine sulg)

   Sub Main()
       Dim i
       For i = 1 To 10 step -1
           Console.WriteLine("Tere Maailm")
       Next i
   End Sub

Samalaadne oleks kui algtingimus on For i = 10 to 1, sest i väärtus kasvab vales suunas, ega rahulda tingimust ilma lisa tingimuseta.

for each...next

muuda

Selle tingimusega käiakse läbi mingit hulka, ja seega ta on piiratud umbkaudselt kuid kindlalt hulga mahtuvusega.

   Sub Main()
       Dim kollektsioon As New Collection
       Dim muutuja As String
       Dim Teade As String = "Tere Maailm"
       Dim i As Long
       For i = 1 To 10
           kollektsioon.Add(Teade)
       Next i
       For Each muutuja In kollektsioon
           Console.WriteLine(muutuja)
       Next muutuja
       Console.ReadLine()
   End Sub

NB: Siin tuleb tähelepanu pöörata pisiasjadele. Kui deklareerida kollektsiooni siis võtmesõna new on hädavajalik, sest me soovime luua uut mitte refereerida sellele väärtust. Ennem kollektsiooni kasutamist peab ta omama väärtust, ja tähtis on teada, et kollektsiooni uurimine lõpeb pärast tema läbikäimist, kus iga hetkeväärtus refereeritakse muutuja muutujasse. Seega pole otseselt tähtis kas me üldse kasutame muutujasse refereeritud väärtus või mitte, esmaselt on paika pandud, et kollektsioon käiakse läbi. Kuna andsime kollektsiooni 10 väärtust käib ta läbi 10 korda. Seega täidaks sama funktsiooni Console.WriteLine(muutuja) asemel ka Console.WriteLine("Tere Maailm"), kui ka Console.WriteLine(Teade).

do...loop

muuda

Tegemist on kinnise kordusega, st. kordusest on vaja väljumiseks mingit tingimust. Tingimusi saab lisada Do ja Loop päisele ja tingimusteks on while [kuni järgnev tingimus on täidetud] ja until [kuni järgnev tingimus saab täidetud], ning nad võivad esineda ka protseduuri täitmise ajal lisades If'ile väljumistingimuse. NT: Tuleks kuvada ekraanile teadet "Tere maailm" korduvalt (a la kinnine sulg)

    Sub Main()
       Do
           Console.WriteLine("Tere Maailm")
       Loop
    End Sub

NT2: Tuleks kuvada ekraanile teadet "Tere maailm" 10 korda

While

muuda

Enne

   Sub Main()
       Dim i As Long = 0
       Do While i < 10
           i += 1
           Console.WriteLine("Tere" & i)
       Loop 
       Console.ReadLine()
   End Sub

Pärast

   Sub Main()
       Dim i As Long = 0
       Do
           i += 1
           Console.WriteLine("Tere" & i)
       Loop While i < 10
       Console.ReadLine()
   End Sub

NB: i+=1 on sama mis i=i+1 NB: Enne ja pärast vahe on see, et kui esimesel juhul oleks i väärtus enne kordusesse asumist 10 või suurem jäetakse kogu kordus vahele, teisel juhul käidaks aga sisu 1 kord läbi.

Until

muuda

Enne

   Sub Main()
       Dim i As Long = 0
       Do While i > 10
           i += 1
           Console.WriteLine("Tere Maailm")
       Loop 
       Console.ReadLine()
   End Sub

Pärast

   Sub Main()
       Dim i As Long = 0
       Do
           i += 1
           Console.WriteLine("Tere Maailm")
       Loop While i > 10
       Console.ReadLine()
   End Sub

NB: Samalaadne whilega, aga tingimuse sisu on ümberpööratud.

Error meetod

muuda
Sub Main()
        On Error GoTo vealahend
        Dim i As Long = 0
        Dim muutuja As Integer

        Do
            i += 1
            Console.WriteLine("Tere Maailm")
            muutuja = Math.Sqrt(9 - i)
        Loop
vealahend:
        Console.ReadLine()
End Sub

Ennem mainitakse ära mis peaks tehtama kui esineb viga. Antud juhul kui esineb viga jätkatakse sildi vealahend: asukohast.

Sisemine tingimus

muuda
   Sub Main()
       Dim i As Long = 0
       Do
           i += 1
           Console.WriteLine("Tere Maailm")
           if i=10 then exit do
       Loop
       Console.ReadLine()
   End Sub

while

muuda
   Sub Main()
       Dim i As Long = 0
       While i > 10 = False
           i += 1
           Console.WriteLine("Tere Maailm")
       End While
       Console.ReadLine()
   End Sub

NB:Tingimusi saab kirjutada ka tingimus ja võrrelda seda olukorra vastavusega ehk "i > 10 = False" on sama mis "i < 10". Samas 2 kordne eitus muutub jaatuseks seega võiks kirjutada ka i < 10 = False = False mis oleks samuti sobilik.

Samas kui loogika kursus on läbimata võib teha vahel sisse mõne vea

Nt:

   Sub Main()
       Dim i As Long = 0
       While i > Not 10 = False
           i += 1
           Console.WriteLine("Tere Maailm")
       End While
       Console.ReadLine()
   End Sub

Nüüd ei ole 2 kordne [bitibäärtuslik] eitus, vaid eitatakse 1 kord i suuremaks olemis 10'st - selle tulemusena sobivad tingimusse kõik arvud st. a'la kinnine sulg.