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:
{VBNET_CONSOLE} If 15 > 5 Then Console.WriteLine("Pravda") End If Console.WriteLine("Program tu pokračuje ďalej") Console.ReadKey() {/VBNET_CONSOLE}
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á:
{VBNET_CONSOLE} 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() {/VBNET_CONSOLE}
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ť | <> |
=
, rovnako ako keď chceme priradiť
hodnotu do premennej. Ak chceme nejaký výraz znegovat, napíšeme pred neho
Not
.
{VBNET_CONSOLE} 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() {/VBNET_CONSOLE}
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:
{VBNET_CONSOLE} 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() {/VBNET_CONSOLE}
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á:
{VBNET_CONSOLE} 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() {/VBNET_CONSOLE}
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:
{VBNET_CONSOLE} 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() {/VBNET_CONSOLE}
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
.
{VBNET_CONSOLE} Dim a As Integer = 0 If a = 0 Then a = 1 Else a = 0 End If Console.WriteLine(a) Console.ReadKey() {/VBNET_CONSOLE}
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 |
{VBNET_CONSOLE} 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() {/VBNET_CONSOLE}
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ť.
{VBNET_CONSOLE} 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() {/VBNET_CONSOLE}
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:
{VBNET_CONSOLE} 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() {/VBNET_CONSOLE}
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
:
{VBNET_CONSOLE} 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() {/VBNET_CONSOLE}
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í.