Doufám, že si pamatujete datové typy, které jsme se naučili v minulém díle. Pokud ne, tak se můžete vrátit k minulému dílu a připomenout si je, dnes se nám budou hodit.
InputBox
Ještě před tím, než přistoupíme k podmínkám, se naučíme úplně jednoduchou funkci, a to InputBox. Slouží k jednoduchému zjištění vstupu od uživatele. Tato funkce zobrazí okno s textem, pod kterým bude textové pole, do kterého uživatel může napsat nějaký text.
Dim vstup1, vstup2 As String
vstup1 = InputBox("Zadejte číslo:")
vstup2 = InputBox("Zadejte číslo:", "Můj program")
Na tomto příkladu jsou vidět dvě možná použití funkce InputBox. Do každé proměnné přiřazujeme výsledek této funkce, tedy do této proměnné se uloží to, co uživatel napsal. Hodnotám, které píšeme do závorky za název funkce, říkáme argumenty nebo též parametry funkce. Ty upravují chování funkce. Některé funkce žádný parametr nepotřebují, některé jich potřebují více. To musíme u každé funkce vědět, ale nebojte se, nemusíte si pamatovat argumenty pro tisíce funkcí, které .NET Framework obsahuje. Programovací prostředí Visual Studio (Visual Basic 2010 Express je pouze jeho součást) vám při použití funkce zobrazí, které parametry funkce potřebuje, kolik jich je, a zobrazí vám k nim i stručnou nápovědu (anglicky).
V okamžiku, kdy píšeme InputBox, filtruje se nám seznam funkcí, které obsahují slovo Input. Pokud jsme spokojeni, napíšeme znak, který bychom psali za slovem funkce, například mezeru nebo kulatou závorku. V okamžiku, kdy to uděláme, zobrazí se detaily volané funkce.

Důležitý je první řádek – vidíme, že funkce má parametr Prompt typu String (text v okně) a dále nepovinné parametry Title (titulek okna), DefaultResponse (co má být předvyplněno) a XPos a YPos, které určují pozici okna na obrazovce. Pokud jsou parametry v hranatých závorkách (což jsou všechny kromě prvního), znamená to, že jsou nepovinné.
Druhý řádek pak popisuje, co celá funkce InputBox dělá. Třetí pak obsahuje popis k parametreu, který právě zadáváme. Se znalostí technické angličtiny je používání těchto funkcí hračka, pomoci může článek Nejčastěji používaná anglická slovíčka v programování.
Zavoláme tedy funkci InputBox, přičemž argumenty si nachystáme do proměnných (nemuseli bychom).
Dim otazka As String = "Zadejte číslo:"
Dim titulek As String = "Můj program"
Dim vstup3 As String
vstup3 = InputBox(otazka, titulek)
Podotýkám, že tato funkce vždy vrací hodnotu typu String. Pokud tedy potřebujeme, aby uživatel zadával číslo, musíme hodnotu převést.
Dim cislo As Integer
cislo = CInt(InputBox("Zadejte číslo:"))
Na tomto příkladu vidíme vnořené funkce. Výsledek vnitřní funkce (InputBox) předáme vnější funkci (CInt) jako argument. Vnitřní funkci jsem podbarvil žlutě, abyste ji viděli. Počítá se k ní i její závorka a argument. Nejprve se vyhodnotí funkce InputBox (žlutě vyznačená oblast). Zobrazí se tedy okno, do kteérho uživatel něco napíše. Jakmile klikne na tlačítko OK, Visual Basic dostane hodnotu této funkce a místo žluté oblasti se "dosadí" tato výsledná hodnota. Až v této chvíli se zavolá funkce CInt, která výsledek funkce InputBox převede na číslo a až úplně nakonec se tato číselná hodnota uloží do proměnné cislo.
Pokud se vám zatím vnořené funkce nelíbí, můžete se jim vyhnout velmi jednoduše přes proměnnou:
Dim vysledek As String = InputBox("Zadejte číslo:")
Dim cislo As Integer = CInt(vysledek)
Tento kód provede úplně to samé, akorát k němu potřebujeme ještě jednu proměnnou. Ale nebojte se, za chvíli si na vnořené funkce zvyknete. Důležité je si uvědomit, že nejprve se provede to, co je uvnitř. Takže je někdy lepší nejprve napsat vnitřní funkci, pak ji dát do závorky a před to napsat název vnější funkci. Časem se ale stejně naučíte "myslet dopředu" a budete ve většině případů kód psát rovnou.
Podmínky
Nyní můžeme přikročit ke slíbeným podmínkám. V jazyce Visual Basic máme dva typy podmínek. Zde vidíte schéma, jak se podmínky zapisují. Není to zdrojový kód, místo [podmínka] a [příkaz] se musí zapsat skutečné příkazy a podmínky! Podmínky slouží k tomu, abychom část programu neprováděli vždy, ale jen pokud platí nějaký vztah.
If [podmínka] Then [příkaz]
If [podmínka] Then
[příkaz]
[příkaz]
[...]
End If
Příkazy, které jsou v ukázce, se provedou, pouze pokud zadaná podmínka platí.
Pokud potřebujeme za nějaké podmínky provést pouze jeden příkaz, stačí nám první typ (tzv. krátká podmínka), který se vejde na jeden řádek. Můžeme ovšem použít i druhý typ.
Pokud potřebujeme za nějaké podmínky provést více příkazů, použijeme druhý způsob (tzv. dlouhá podmínka). Nezapomeneme na konci podmíněný blok ukončit příkazem End If.
Někdy potřebujeme provést i nějaké příkazy, pokud podmínka neplatí. K tomu použijeme tato rozšíření schématu podmínky.
If [podmínka] Then [příkaz] Else [příkaz]
If [podmínka] Then
[příkaz]
[příkaz]
[...]
Else
[příkaz]
[příkaz]
[...]
End If
To, co je před slovem Else se provede, pokud podmínka platí. Pokud neplatí, provede se to, co je za slovem Else.
Všimněte si, že příkazy uvnitř podmínky jsou odsazené. Visual Basic toto odsazení provádí sám. Možná vám přijde, že odsazovat nemá smysl, ale brzy poznáte, že neodsazovaný kód je velmi nepřehledný. Odsazování příkazů uvnitř podmínek naznačuje, že tyto příkazy se neprovádí pokaždé, že jsou v nějakém ohledu speciální, a že patří do nějakého bloku.
Tyto odsazené bloky mají ještě jeden význam – pokud v nich nadeklarujete proměnnou, bude platit jenom v tom bloku a ne vně. Jakmile blok se při vykonávání opustí, proměnná zanikne.
Zde vidíme úplně jednoduchý program, který již dělá něco užitečného. Zjistí, jestli uživatel zadal liché či sudé číslo. Využíváme toho, že pokud je číslo sudé, jehozbytek po vydělení dvěmi (operátor Mod) bude nula.
Dim cislo As Integer
cislo = CInt(InputBox("Zadejte číslo:"))
If cislo Mod 2 = 0 Then
MsgBox("Číslo je sudé!")
Else
MsgBox("Číslo je liché!")
End If
Toto je tedy první praktický příklad, jak použít podmínku. Dá se jich samozřejmě vymyslet celá řada.
Podmínkou je v tomto případě výraz cislo Mod 2 = 0. Říkali jsme si, že značka rovná se se používá k přiřazení hodnoty do proměnné. V tomto případě ale tento operátor provede porovnání. Spočítá výrazy na obou stranách a porovná je.
To, jestli rovná se znamená přiřazení nebo porovnání, se pozná podle toho, kde je použito. Uvnitř podmínek je to porovnání, pokud stojí jako samostatný příkaz (např. a = 5), pak se provede přiřazení.
Relační operátory
Relace je vztah něčeho k něčemu. Relační operátory mezi sebou porovnávají dvě hodnoty. Visual Basic zná tyto:
| Operátor |
Význam |
| = |
rovná se |
| <> |
nerovná se |
| < |
je menší než |
| > |
je větší než |
| <= |
je menší nebo rovno |
| >= |
je větší nebo rovno |
Výsledkem výrazu s relačním operátorem je vždy hodnota typu Boolean, tedy buď True (pravda) nebo False (nepravda). Podmínka se splní, pokud výsledek výrazu je True.
Při porovnávání čísel se porovnává jejich hodnota. Porovnávat můžeme i řetězce, v takovém případě se porovnává podle abecedy (“jablko” > “hruška”).
Pozor, u operátorů <= a >= záleží na pořadí, nesmíme napsat =< ani =>, první operátor by byl nesmysl, druhý znamená něco jiného.
Logické operátory
Dalším typem operátorů jsou operátory logické. Ty pracují s hodnotami typu Boolean, nejčastěji se používají ve spojitosti s výrazy s relačními operátory. Základní logické operátory jsou tři:
| Operátor |
Význam |
| And |
a |
| Or |
nebo |
| Not |
ne |
Místo True budeme používat jedničku, místo False nulu. Zde je tabulka, která ukazuje, jak se tyto operátory chovají:
| A |
B |
A And B (a) |
A Or B (nebo) |
| 0 |
0 |
0 And 0 = 0 |
0 Or 0 = 0 |
| 0 |
1 |
0 And 1 = 0 |
0 Or 1 = 1 |
| 1 |
0 |
1 And 0 = 0 |
1 Or 0 = 1 |
| 1 |
1 |
1 And 1 = 1 |
1 Or 1 = 1 |
Operátor Not potřebuje jen jednu vstupní hodnotu:
| A |
Not A (ne) |
| 0 |
Not 0 = 1 |
| 1 |
Not 1 = 0 |
Jako malé cvičení si můžete zkusit zjistit, jaká je hodnota následujících výrazů:
- (True And False) And (True Or Not (False Or True))
- (True And (3 <= 7))
- Not (“hello” = “hello”)
- “3” < “100”
- (True And False) = Not (True Or False)
Správné odpovědi: False, True, False, False, True
Složené podmínky
Na tomto příkladu je krásně vidět, jak fungují výrazy s oběma typy operátorů.
Je to jednoduchý program, který se uživatele zeptá na dvě čísla a vypíše, jestli alespoň jedno z nich byla trojka nebo jestli obě byly sedmičky.
Dim cislo1 As Integer = CInt(InputBox("Zadejte první číslo:"))
Dim cislo2 As Integer = CInt(InputBox("Zadejte druhé číslo:"))
If (cislo1 = 3) Or (cislo2 = 3) Then
MsgBox("Zadal jste alespoň jednu trojku.")
End If
If (cislo1 = 7) And (cislo2 = 7) Then
MsgBox("Zadal jste dvě sedmičky.")
End If
Obě podmínky dáváme do závorek a mezi ně napíšeme logický operátor, který řekne, jestli musí platit obě podmínky zároveň (And), nebo stačí, když platí jedna z nich (Or).
Trojúhelníková nerovnost
Nyní si napíšeme velmi jednoduchou aplikaci, které zadáme délky stran trojúhelníka, a ona nám vypíše, jestli trojúhelník můžeme sestrojit, nebo jej sestrojit nemůžeme.
Pokud je součet délek každých dvou stran trojúhelníka větší než délka strany třetí, trojúhelník lze sestrojit. Důležité je si uvědomit, že každé dvě strany musí být větší než ta třetí. Nestačí tedy sečíst první dvě délky a porovnat je se třetí, musíme udělat dohromady 3 testy.
Vytvořte si tedy nový projekt (Windows Forms Application, jako vždycky), přidejte si na formulář 3 textová pole (TextBox), do každé zadáme délku jedné strany trojúhelníka, a nakonec tlačítko (Button), na které napište třeba text Zkontrolovat.
Dvakrát klikněte na tlačítko, napíšeme proceduru, která se spustí po kliknutí na toto tlačítko.
Dim a As Double = CDbl(TextBox1.Text)
Dim b As Double = CDbl(TextBox2.Text)
Dim c As Double = CDbl(TextBox3.Text)
If (a + b > c) And (b + c > a) And (c + a > b) Then
MsgBox("Trojúhelník existuje.")
Else
MsgBox("Trojúhelník neexistuje.")
End If
To je celé. Na prvních třech řádcích vytváříme proměnné a, b, c typu Double, tedy desetinné číslo, a nahráváme do nich texty z textových polí. Jelikož jsou to texty, musíme je převést na typ Double funkcí CDbl, protože texty do proměnných na desetinná čísla "nacpat" nemůžeme.
Podmínka testuje tři výrazy a mezi nim jsou klíčová slova And, což znamená, že musí platit všechny podmínky zároveň. Jakmile jedna z nich neplatí, trojúhelník už neexistuje. Testujeme každé dvě strany proti straně třetí, myslím, že z ukázky kódu je to jasné.
Pokud se podmínky splní, zobrazíme zprávu, že trojúhelník existuje, pokud ne, zobrazí se, že trojúhelník neexistuje.
SOUTĚŽ: Byla vyhlášena malá programátorská soutěž pro všechny soutěživé začátečníky! Úkolem bylo přidat do tohoto prográmku tlačítko Spočítat obsah, které po kliknutí vypíše obsah trojúhelníka se stranami zadaných délek.
VYHODNOCENÍ: Na můj mail dorazila tři řešení, všechna byla správná. Výherce tedy máme tři - jsou jimi Luboš Blader, Jiří Pavliš a Tomáš Balvar, jehož správné řešení se mi zatoulalo do složky nevyžádaná pošta a objevil jsem jej až dodatečně, za což se mu omlouvám. Všem třem výhercům gratuluji.
Pro spočítání obsahu stačilo použít tzv. Herónův vzorec:
Více informací o tomto vzorci najdete třeba na této stránce, kde najdete také důkaz platnosti tohoto vzorce. Druhou odmocninu čísla dostaneme přes funkci Math.Sqrt.
s = (a + b + c) / 2
MsgBox(Math.Sqrt(s * (s - a) * (s - b) * (s - c)))
Komentáře
Komentáře jsou vysvětlivky uvnitř programového kódu, které se neprovádí, ale slouží k tomu, abychom si popsali, co daná část kódu dělá. Visual Basic je ignoruje, nevšímá si jich, takže pokud potřebujeme něco testovat a chcemě nějaký kus kódu dočasně vyřadit z činnosti, můžeme jej do komentářů uzavřít.
Nedoporučuji ale zakomentovaný kód v projektu nechat, mívá totiž tendenci se hromadit a po čase už každý zapomene, k čemu tam vlastně byl a proč byl zakomentován.
Komentáře se zapisují kamkoliv do kódu, musíme před ně akorát napsat znak apostrof (většinou Shift a klávesa vedle klávesy Backspace). Cokoliv za apostrofem až do konce řádku je komentář, Visual Studio jej zvýrazní zeleně, aby se nepletl s programovým kódem. Zde je příklad:
Dim a As Double = CDbl(TextBox1.Text)
Dim b As Double = CDbl(TextBox2.Text)
Dim c As Double = CDbl(TextBox3.Text)
If (a + b > c) And (b + c > a) And (c + a > b) Then
MsgBox("Trojúhelník existuje.")
Else
MsgBox("Trojúhelník neexistuje.")
End If
Za domácí úkol si můžete aplikaci pro práci s trojúhelníky rozšířit, aby uměla počítat obvod trojúhelníka a dále zjistila, jestli je pravoúhlý. K tomu může posloužit třeba Pythagorova věta.
Jsem hlavním softwarovým architektem ve společnosti Riganti. Mám dlouholeté zkušenosti s technologiemi ASP.NET, Silverlight, WPF a XNA. Působím též jako lektor ve společnosti Gopas a již třetím rokem jsem držitelem ocenění Microsoft Most Valuable Professional.