NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 5 - Podmínky (větvení) ve VB.NET

V předešlém cvičení, Řešené úlohy k 4. lekci VB.NET, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

Abychom si něco naprogramovali, potřebujeme nějak reagovat na různé situace. Může to být například hodnota zadaná uživatelem, podle které budeme chtít měnit další běh programu. Říkáme, že se program větví a k větvení používáme podmínky, těm se budeme věnovat celý dnešní Visual Basic .NET tutoriál. Vytvoříme program na výpočet odmocniny a vylepšíme naši kalkulačku.

Podmínky

Podmínky zapisujeme pomocí klíčového slova If, za kterým následuje logický výraz a za ním klíčové slovo Then. Pokud je výraz pravdivý, provede se následující příkaz. Pokud ne, následující příkaz se přeskočí a pokračuje se až pod ním. Podmínku ukončuje End If. Vyzkoušejme si to:

Klikni pro editaci
  • If 15 > 5 Then
        Console.WriteLine("Pravda")
    End If
    Console.WriteLine("Program zde pokračuje dál")
    Console.ReadKey()
    
    • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

    Výstup programu:

    Konzolová aplikace
    Pravda
    Program zde pokračuje dál

    Pokud podmínka platí (což zde ano), provede se příkaz vypisující do konzole text pravda. V obou případech program pokračuje dál. Součástí výrazu samozřejmě může být i proměnná:

    Klikni pro editaci
    • Console.WriteLine("Zadej nějaké číslo")
      Dim a As Integer = Console.ReadLine()
      If a > 5 Then
          Console.WriteLine("Zadal jsi číslo větší než 5!")
      End If
      Console.WriteLine("Děkuji za zadání")
      Console.ReadKey()
      
      • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

      Ukažme si nyní relační operátory, které můžeme ve výrazech používat:

      Operátor VB.NET zápis
      Rovnost =
      Je ostře větší >
      Je ostře menší <
      Je větší nebo rovno >=
      Je menší nebo rovno <=
      Nerovnost <>

      Rovnost zapisujeme jedním =, stejně jako když chceme přiřadit hodnotu do proměnné. Pokud chceme nějaký výraz znegovat, napíšeme před něj Not.

      Klikni pro editaci
      • Console.WriteLine("Zadej nějaké číslo, ze kterého spočítám odmocninu:")
        Dim a As Integer = Console.ReadLine()
        If a > 0 Then
            Console.WriteLine("Zadal jsi číslo větší než 0, to znamená, že ho mohu odmocnit!")
            Dim o As Double = Math.Sqrt(a)
                Console.WriteLine("Odmocnina z čísla " & a & " je " & o)
        End If
        Console.WriteLine("Děkuji za zadání")
        Console.ReadKey()
        
        • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.


        Konzolová aplikace
        Zadej nějaké číslo, ze kterého spočítám odmocninu:
        144
        Zadal jsi číslo větší než 0, to znamená, že ho mohu odmocnit!
        Odmocnina z čísla 144 je 12
        Děkuji za zadání

        Program načte od uživatele číslo a pokud je větší než 0, vypočítá z něj druhou odmocninu. Mimo jiné jsme použili třídu Math, která na sobě obsahuje řadu užitečných matematických metod, na konci této kapitoly si ji blíže představíme. Sqrt() vrací hodnotu jako Double. Bylo by hezké, kdyby nám program vyhuboval v případě, že zadáme záporné číslo. S dosavadními znalostmi bychom napsali něco jako:

        Klikni pro editaci
        • Console.WriteLine("Zadej nějaké číslo, ze kterého spočítám odmocninu:")
          Dim a As Integer = Console.ReadLine()
          If a > 0 Then
              Console.WriteLine("Zadal jsi číslo větší než 0, to znamená, že ho mohu odmocnit!")
              Dim o As Double = Math.Sqrt(a)
              Console.WriteLine("Odmocnina z čísla " & a & " je " & o)
          End If
          If a <= 0 Then
              Console.WriteLine("Odmocnina ze záporného čísla neexistuje!")
          End If
          Console.WriteLine("Děkuji za zadání")
          Console.ReadKey()
          
          • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

          Všimněte si, že musíme pokrýt i případ, kdy se a = 0, nejen když je menší. Kód však můžeme výrazně zjednodušit pomocí klíčového slova Else, které vykoná následující příkaz nebo blok příkazů v případě, že se podmínka neprovede:

          Klikni pro editaci
          • Console.WriteLine("Zadej nějaké číslo, ze kterého spočítám odmocninu:")
            Dim a As Integer = Console.ReadLine()
            If a > 0 Then
                Console.WriteLine("Zadal jsi číslo větší než 0, to znamená, že ho mohu odmocnit!")
                Dim o As Double = Math.Sqrt(a)
                Console.WriteLine("Odmocnina z čísla " & a & " je " & o)
            Else
                Console.WriteLine("Odmocnina ze záporného čísla neexistuje!")
            End If
            Console.WriteLine("Děkuji za zadání")
            Console.ReadKey()
            
            • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

            Kód je mnohem přehlednější a nemusíme vymýšlet opačnou podmínku, což by v případě složené podmínky mohlo být někdy i velmi obtížné.

            Else se také využívá v případě, kdy potřebujeme v příkazu manipulovat s proměnnou z podmínky a nemůžeme se na ni tedy ptát potom znovu. Program si sám pamatuje, že se podmínka nesplnila a přejde do sekce Else. Ukažme si to na příkladu: Mějme číslo a, kde bude hodnota 0 nebo 1 a po nás se bude chtít, abychom hodnotu prohodili (pokud tam je 0, dáme tam 1, pokud 1, dáme tam 0). Naivně bychom mohli kód napsat takto:

            Klikni pro editaci
            • 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()
              
              • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

              Nefunguje to, že? Pojďme si projet, co bude program dělat. Na začátku máme v a nulu, první podmínka se jistě splní a dosadí do a jedničku. No ale rázem se splní i ta druhá. Co s tím? Když podmínky otočíme, budeme mít ten samý problém s jedničkou. Jak z toho ven? Ano, použijeme Else.

              Klikni pro editaci
              • Dim a As Integer = 0
                If a = 0 Then
                    a = 1
                Else
                    a = 0
                End If
                Console.WriteLine(a)
                Console.ReadKey()
                
                • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

                Podmínky je možné skládat a to pomocí dvou základních operátorů:

                Operátor VB.NET zápis
                A zároveň And
                Nebo Or

                Uveďme si příklad:

                Klikni pro editaci
                • Console.WriteLine("Zadejte číslo v rozmezí 10-20:")
                  Dim a As Integer = Console.ReadLine()
                  If a >= 10 And a <= 20 Then
                      Console.WriteLine("Zadal jsi správně")
                  Else
                      Console.WriteLine("Zadal jsi špatně")
                  End If
                  Console.ReadKey()
                  
                  • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

                  S tím si zatím vystačíme, operátory se pomocí závorek samozřejmě dají kombinovat.

                  Klikni pro editaci
                  • Console.WriteLine("Zadejte číslo v rozmezí 10-20 nebo 30-40:")
                    Dim a As Integer = Console.ReadLine()
                    If ((a >= 10) And (a <= 20)) Or ((a >= 30) And (a <= 40)) Then
                        Console.WriteLine("Zadal jsi správně")
                    Else
                        Console.WriteLine("Zadal jsi špatně")
                    End If
                    Console.ReadKey()
                    
                    • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

                    Select Case

                    Select Case nám umožňuje zjednodušit (relativně) zápis více podmínek pod sebou. Vzpomeňme si na naši kalkulačku v prvních lekcích, která načetla 2 čísla a vypočítala všechny 4 operace. Nyní si ale budeme chtít zvolit, kterou operaci chceme. Bez Select Case bychom napsali kód podobný tomuto:

                    Klikni pro editaci
                    • Console.WriteLine("Vítejte v kalkulačce")
                      Console.WriteLine("Zadejte první číslo:")
                      Dim a As Single = Console.ReadLine()
                      Console.WriteLine("Zadejte druhé číslo:")
                      Dim b As Single = Console.ReadLine()
                      Console.WriteLine("Zvolte si operaci:")
                      Console.WriteLine("1 - sčítání")
                      Console.WriteLine("2 - odčítání")
                      Console.WriteLine("3 - násobení")
                      Console.WriteLine("4 - dělení")
                      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ýsledek: {0}", vysledek)
                      Else
                          Console.WriteLine("Neplatná volba")
                      End If
                      
                      Console.WriteLine("Děkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou.")
                      Console.ReadKey()
                      
                      • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.


                      Konzolová aplikace
                      Vítejte v kalkulačce
                      Zadejte první číslo:
                      3,14
                      Zadejte druhé číslo:
                      2,72
                      Zvolte si operaci:
                      1 - sčítání
                      2 - odčítání
                      3 - násobení
                      4 - dělení
                      2
                      Výsledek: 0,42
                      Děkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou.

                      Všimněte si, že jsme proměnnou vysledek deklarovali na začátku, jen tak do ni můžeme potom přiřazovat. Kdybychom ji deklarovali u každého přiřazení, Visual Basic by kód nezkompiloval a vyhodil chybu redeklarace proměnné. Proměnná může být deklarována (založena v paměti) vždy jen jednou. Bohužel Visual Basic není schopen poznat, zda je do proměnné vysledek opravdu přiřazena nějaká hodnota. Ozve se při výpisu na konzoli, kde se mu nelíbí, že může vypisovat proměnnou, která nemá přiřazenu hodnotu. Z tohoto důvodu na začátku dosadíme do vysledek nulu. Další vychytávka je kontrola správnosti volby. Program by v tomto případě fungoval stejně i bez těch Else, ale nač se dále ptát, když již máme výsledek.

                      Nyní si zkusíme napsat ten samý kód pomocí Select Case:

                      Klikni pro editaci
                      • Console.WriteLine("Vítejte v kalkulačce")
                        Console.WriteLine("Zadejte první číslo:")
                        Dim a As Single = Console.ReadLine()
                        Console.WriteLine("Zadejte druhé číslo:")
                        Dim b As Single = Console.ReadLine()
                        Console.WriteLine("Zvolte si operaci:")
                        Console.WriteLine("1 - sčítání")
                        Console.WriteLine("2 - odčítání")
                        Console.WriteLine("3 - násobení")
                        Console.WriteLine("4 - dělení")
                        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ýsledek: {0}", vysledek)
                        Else
                            Console.WriteLine("Neplatná volba")
                        End If
                        
                        Console.WriteLine("Děkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou.")
                        Console.ReadKey()
                        
                        • Zkontroluj, zda výstupy programu odpovídají předloze. S jinými texty testy neprojdou.

                        Select Case může místo Case x: obsahovat ještě možnost Case Else, která se vykoná v případě, že nebude platit žádný Case. Je jen na vás, jestli budete Select Case používat, obecně se vyplatí jen při větším množství příkazů a vždy jde nahradit sekvencí If a Else. Select Case jde samozřejmě udělat i pro hodnoty proměnné typu String.

                        To bychom měli.

                        V následujícím cvičení, Řešené úlohy k 5. lekci VB.NET, si procvičíme nabyté zkušenosti z předchozích lekcí.


                         

                        Jak se ti líbí článek?
                        Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
                        Předchozí článek
                        Řešené úlohy k 4. lekci VB.NET
                        Všechny články v sekci
                        Základní konstrukce jazyka Visual Basic (VB.NET)
                        Přeskočit článek
                        (nedoporučujeme)
                        Řešené úlohy k 5. lekci VB.NET
                        Článek pro vás napsal Michal Žůrek - misaz
                        Avatar
                        Uživatelské hodnocení:
                        32 hlasů
                        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