IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

5. diel - Podmienky (vetvenia)

V predchádzajúcom cvičení, Riešené úlohy k 4. lekcii VB.NET, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.

V minulej lekcii, Riešené úlohy k 4. lekcii VB.NET , sme si podrobne prebrali dátové typy. Aby sme si niečo naprogramovali, potrebujeme nejako reagovať na rôzne situácie. Môže to byť napríklad hodnota zadaná užívateľom, podľa ktorej budeme chcieť meniť ďalšie beh programu. Hovoríme, že sa program vetví a k vetvenia používame podmienky, tým sa budeme venovať celý dnešný Visual Basic .NET tutoriál. Vytvoríme program na výpočet odmocniny a vylepšíme našu kalkulačku.

Podmienky

Podmienky zapisujeme pomocou kľúčového slova If, za ktorým nasleduje logický výraz a za ním kľúčové slovo Then. Ak je výraz pravdivý, vykoná sa nasledujúci príkaz. Ak nie, nasledujúci príkaz sa preskočí a pokračuje sa až pod ním. Podmienku ukončuje End If. Vyskúšajme si to:

If 15 > 5 Then
    Console.WriteLine("Pravda")
End If
Console.WriteLine("Program tu pokračuje ďalej")
Console.ReadKey()

Výstup programu:

Konzolová aplikácia
Pravda
Program tu pokračuje ďalej

Ak podmienka platí (čo tu áno), vykoná sa príkaz Vyhlasujúca do konzoly text pravda. V oboch prípadoch program pokračuje ďalej. Súčasťou výrazu samozrejme môže byť aj premenná:

Console.WriteLine("Zadaj nejaké číslo")
Dim a As Integer = Console.ReadLine()
If a > 5 Then
    Console.WriteLine("Zadal si číslo väčšie ako 5!")
End If
Console.WriteLine("Ďakujem za zadania")
Console.ReadKey()

Ukážme si teraz relačné operátory, ktoré môžeme vo výrazoch používať:

operátor VB.NET zápis
rovnosť =
Je ostro väčšia >
Je ostro menšia <
Je väčšie alebo rovné > =
Je menšie alebo rovné <=
nerovnosť <>
Rovnosť zapisujeme jedným =, rovnako ako keď chceme priradiť hodnotu do premennej. Ak chceme nejaký výraz znegovat, napíšeme pred neho Not.
Console.WriteLine("Zadaj nejaké číslo, z ktorého spočítám odmocninu:")
Dim a As Integer = Console.ReadLine()
If a > 0 Then
    Console.WriteLine("Zadal si číslo väčšie ako 0, to znamená, že ho môžem odmocniť!")
    Dim o As Double = Math.Sqrt(a)
        Console.WriteLine("Odmocnina z čísla " & a & " je " & o)
End If
Console.WriteLine("Ďakujem za zadania")
Console.ReadKey()

Konzolová aplikácia
Zadaj nejaké číslo, z ktorého spočítám odmocninu:
144
Zadal si číslo väčšie ako 0, to znamená, že ho môžem odmocniť!
Odmocnina z čísla 144 je 12
Ďakujem za zadania

Program načíta od užívateľa číslo a ak je väčšia ako 0, vypočíta z neho druhú odmocninu. Okrem iného sme použili triedu Math, ktorá na sebe obsahuje množstvo užitočných matematických metód, na konci tejto kapitoly si ju bližšie predstavíme. Sqrt() vracia hodnotu ako Double. Bolo by pekné, keby nám program vyhubovala v prípade, že zadáme záporné číslo. S doterajšími znalosťami by sme napísali niečo ako:

Console.WriteLine("Zadaj nejaké číslo, z ktorého spočítám odmocninu:")
Dim a As Integer = Console.ReadLine()
If a > 0 Then
    Console.WriteLine("Zadal si číslo väčšie ako 0, to znamená, že ho môžem odmocniť!")
    Dim o As Double = Math.Sqrt(a)
    Console.WriteLine("Odmocnina z čísla " & a & " je " & o)
End If
If a <= 0 Then
    Console.WriteLine("Odmocnina zo záporného čísla neexistuje!")
End If
Console.WriteLine("Ďakujem za zadania")
Console.ReadKey()

Všimnite si, že musíme pokryť aj prípad, kedy sa a = 0, nielen keď je menšia. Kód však môžeme výrazne zjednodušiť pomocou kľúčového slova Else, ktoré vykoná nasledujúci príkaz alebo blok príkazov v prípade, že sa podmienka nevykoná:

Console.WriteLine("Zadaj nejaké číslo, z ktorého spočítám odmocninu:")
Dim a As Integer = Console.ReadLine()
If a > 0 Then
    Console.WriteLine("Zadal si číslo väčšie ako 0, to znamená, že ho môžem odmocniť!")
    Dim o As Double = Math.Sqrt(a)
    Console.WriteLine("Odmocnina z čísla " & a & " je " & o)
Else
    Console.WriteLine("Odmocnina zo záporného čísla neexistuje!")
End If
Console.WriteLine("Ďakujem za zadania")
Console.ReadKey()

Kód je oveľa prehľadnejšie a nemusíme vymýšľať opačnú podmienku, čo by v prípade zloženej podmienky mohlo byť niekedy aj veľmi ťažké.

Else sa tiež využíva v prípade, keď potrebujeme v príkaze manipulovať s premennou z podmienky a nemôžeme sa na ňu teda pýtať potom znova. Program si sám pamätá, že sa podmienka nesplnila a prejde do sekcie Else. Ukážme si to na príklade: Majme číslo a, kde bude hodnota 0 alebo 1 a po nás sa bude chcieť, aby sme hodnotu prehodili (ak tam je 0, dáme tam 1, ak 1, dáme tam 0). Naivne by sme mohli kód napísať takto:

Dim a As Integer = 0
If a = 0 Then
    a = 1
End If
If a = 1 Then
    a = 0
End If
Console.WriteLine(a)
Console.ReadKey()

Nefunguje to, že? Poďme si prejsť, čo bude program robiť. Na začiatku máme v a nulu, prvá podmienka sa určite splní a dosadí do a jedničku. No ale razom sa splní aj tá druhá. Čo s tým? Keď podmienky otočíme, budeme mať ten istý problém s jednotkou. Ako z toho von? Áno, použijeme Else.

Dim a As Integer = 0
If a = 0 Then
    a = 1
Else
    a = 0
End If
Console.WriteLine(a)
Console.ReadKey()

Podmienky je možné skladať a to pomocou dvoch základných operátorov:

operátor VB.NET zápis
A zároveň and
alebo Or
Uveďme si príklad:
Console.WriteLine("Zadajte číslo v rozmedzí 10-20:")
Dim a As Integer = Console.ReadLine()
If a >= 10 And a <= 20 Then
    Console.WriteLine("Zadal si správne")
Else
    Console.WriteLine("Zadal si zle")
End If
Console.ReadKey()

S tým si zatiaľ vystačíme, operátorov sa pomocou zátvoriek samozrejme dajú kombinovať.

Console.WriteLine("Zadajte číslo v rozmedzí 10-20 alebo 30-40:")
Dim a As Integer = Console.ReadLine()
If ((a >= 10) And (a <= 20)) Or ((a >= 30) And (a <= 40)) Then
    Console.WriteLine("Zadal si správne")
Else
    Console.WriteLine("Zadal si zle")
End If
Console.ReadKey()

Select Case

Select Case nám umožňuje zjednodušiť (relatívne) zápis viac podmienok pod sebou. Spomeňme si na našu kalkulačku v prvých lekciách, ktorá načítala 2 čísla a vypočítala všetky 4 operácie. Teraz si ale budeme chcieť zvoliť, ktorú operáciu chceme. Bez Select Case by sme napísali kód podobný tomuto:

Console.WriteLine("Vitajte v kalkulačke")
Console.WriteLine("Zadajte prvé číslo:")
Dim a As Single = Console.ReadLine()
Console.WriteLine("Zadajte druhé číslo:")
Dim b As Single = Console.ReadLine()
Console.WriteLine("Zvoľte si operáciu:")
Console.WriteLine("1 - sčítanie")
Console.WriteLine("2 - odčítanie")
Console.WriteLine("3 - násobenie")
Console.WriteLine("4 - delenie")
Dim volba As Integer = Console.ReadLine()
Dim vysledek As Single = 0
If volba = 1 Then
    vysledek = a + b
Else
    If volba = 2 Then
        vysledek = a - b
    Else
        If volba = 3 Then
            vysledek = a * b
        Else
            If volba = 4 Then
                vysledek = a / b
            End If
        End If
    End If
End If
If volba > 0 And volba < 5 Then
    Console.WriteLine("Výsledok: {0}", vysledek)
Else
    Console.WriteLine("Neplatná voľba")
End If

Console.WriteLine("Ďakujem za použitia kalkulačky, aplikáciu ukončíte ľubovoľnou klávesou.")
Console.ReadKey()

Konzolová aplikácia
Vitajte v kalkulačke
Zadajte prvé číslo:
3,14
Zadajte druhé číslo:
2,72
Zvoľte si operáciu:
1 - sčítanie
2 - odčítanie
3 - násobenie
4 - delenie
2
Výsledok: 0,42
Ďakujem za použitia kalkulačky, aplikáciu ukončíte ľubovoľnou klávesou.

Všimnite si, že sme premennú vysledek deklarovali na začiatku, len tak do nej môžeme potom priraďovať. Keby sme ju deklarovali u každého priradenie, Visual Basic by kód nezkompiloval a vyhodil chybu redeklarace premenné. Premenná môže byť deklarovaná (založená v pamäti) vždy iba raz. Bohužiaľ Visual Basic nie je schopný poznať, či je do premennej vysledek naozaj priradená nejaká hodnota. Ozve sa pri výpise na konzole, kde sa mu nepáči, že môže vypisovať premennú, ktorá nemá priradenú hodnotu. Z tohto dôvodu na začiatku dosadíme do vysledek nulu. Ďalšia vychytávka je kontrola správnosti voľby. Program by v tomto prípade fungoval rovnako aj bez tých Else, ale načo sa ďalej pýtať, keď už máme výsledok.

Teraz si skúsime napísať ten istý kód pomocou Select Case:

Console.WriteLine("Vitajte v kalkulačke")
Console.WriteLine("Zadajte prvé číslo:")
Dim a As Single = Console.ReadLine()
Console.WriteLine("Zadajte druhé číslo:")
Dim b As Single = Console.ReadLine()
Console.WriteLine("Zvoľte si operáciu:")
Console.WriteLine("1 - sčítanie")
Console.WriteLine("2 - odčítanie")
Console.WriteLine("3 - násobenie")
Console.WriteLine("4 - delenie")
Dim volba As Integer = Console.ReadLine()
Dim vysledek As Single = 0
Select Case volba
    Case 1
        vysledek = a + b
    Case 2
        vysledek = a - b
    Case 3
        vysledek = a * b
    Case 4
        vysledek = a / b
End Select
If volba > 0 And volba < 5 Then
    Console.WriteLine("Výsledok: {0}", vysledek)
Else
    Console.WriteLine("Neplatná voľba")
End If

Console.WriteLine("Ďakujem za použitia kalkulačky, aplikáciu ukončíte ľubovoľnou klávesou.")
Console.ReadKey()

Select Case môže namiesto Case x: obsahovať ešte možnosť Case Else, ktorá sa vykoná v prípade, že nebude platiť žiadny Case. Je len na vás, či budete Select Case používať, všeobecne sa oplatí len pri väčšom množstve príkazov a vždy ide nahradiť sekvencií If a Else. Select Case ide samozrejme urobiť aj pre hodnoty premennej typu String.

To by sme mali. V budúcej lekcii, Riešené úlohy k 5. lekcii VB.NET , nás čakajú polia a cykly. Tým dovŕšite základné znalosti, máte sa na čo tešiť :)

V nasledujúcom cvičení, Riešené úlohy k 5. lekcii VB.NET, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Predchádzajúci článok
Riešené úlohy k 4. lekcii VB.NET
Všetky články v sekcii
Základné konštrukcie jazyka Visual Basic (VB .NET)
Preskočiť článok
(neodporúčame)
Riešené úlohy k 5. lekcii VB.NET
Článok pre vás napísal Michal Žůrek - misaz
Avatar
Užívateľské hodnotenie:
1 hlasov
Autor se věnuje tvorbě aplikací pro počítače, mobilní telefony, mikroprocesory a tvorbě webových stránek a webových aplikací. Nejraději programuje ve Visual Basicu a TypeScript. Ovládá HTML, CSS, JavaScript, TypeScript, C# a Visual Basic.
Aktivity