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
IIf
[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 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.