Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

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:

Klikni pre editáciu
  • If 15 > 5 Then
        Console.WriteLine("Pravda")
    End If
    Console.WriteLine("Program tu pokračuje ďalej")
    Console.ReadKey()
    
    • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

    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á:

    Klikni pre editáciu
    • 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()
      
      • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

      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.
      Klikni pre editáciu
      • 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()
        
        • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.


        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:

        Klikni pre editáciu
        • 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()
          
          • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

          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á:

          Klikni pre editáciu
          • 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()
            
            • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

            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:

            Klikni pre editáciu
            • 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()
              
              • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

              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.

              Klikni pre editáciu
              • Dim a As Integer = 0
                If a = 0 Then
                    a = 1
                Else
                    a = 0
                End If
                Console.WriteLine(a)
                Console.ReadKey()
                
                • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

                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:
                Klikni pre editáciu
                • 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()
                  
                  • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

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

                  Klikni pre editáciu
                  • 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()
                    
                    • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

                    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:

                    Klikni pre editáciu
                    • 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()
                      
                      • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.


                      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:

                      Klikni pre editáciu
                      • 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()
                        
                        • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

                        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í.


                         

                        Ako sa ti páči článok?
                        Pred uložením hodnotenia, popíš prosím autorovi, čo je zleZnakov 0 z 50-500
                        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