C# - 4.díl - Větvení programu

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: sukovanej
Datum: 27.10.2012
Hodnocení/Hlasovalo: 2.17/6

V tomto díle o programování v jazyce C# si ukážeme, jak používat rozhodovací struktury a větvit tak podmíněně chod programu.

Podmínky If

Podmínky If jsou nejpoužívanějším způsobem větvení programu. Zapisují se následovně

if (podmínka)
{
  příkaz;
  příkaz;
  a další příkazy;
}

Podmínka na první řádku je matematicky zapsaný výrok. Např. od uživatele získáme jméno v podobě textové proměnné. Když chceme zjistit, jestli je to jméno Martin, sestavíme podmínku následovně :

string a; // Proměnná, s níž budeme pracovat
if (a == "Martin")
{
  MessageBox.Show("Uvedené jméno je Martin !");
}

Kdybychom tento kód zkompilovali, tak by samozřejmě buď vyhodil chybu, nebo by se nic neprovedlo. Proměnná a totiž nemá definovanou žádnou hodnotu. Buď bychom ji určili napevno, nebo ji získali od uživatele skrze komponentu (textBox, například).

Z příkladu výše je také doufám jasné, že kód, který je mezi složenými závorkami, se provede v případě, kdy podmínka (a == "Martin") platí. Velký pozor je také třeba dávat na to, že pro porovnání dvou hodnot se při rovnosti nepoužívá rovnítko (=), ale dvě rovnítka (==) a to ze zcela evidentního důvodu. Rovnítko jako takové už má definovanou funkci, přiřazování (viz. minulý díl).

Porovnávání hodnot

Pokud dvě hodnoty porovnáváme, používáme k tomu běžně známou matematickou symboliku.

Při porovnávání také musíme dávat pozor na datové typy porovnávaných hodnot. Nemůžeme porovnávat např. text s číslem. Za předpokladu, že je textový řetězec tvořen prvky číslic, můžeme ho převést na číselný datový typ a ten potom porovnávat, ale jinak ne.

Složené podmínky

Složené podmínky se používají, pokud předpokládáme více různých výsledků. Pokud se vrátíme k našemu příkladu se jmény, můžeme například podmínku pro jméno Martin nechat vypsat text a pro jméno Milan jiný text.

K naší struktuře If jen přidáme strukturu else if, která se liší pouze v tom, že namísto if napíšeme else if.

string a; // Proměnná, s níž budeme pracovat
if (a == "Martin")
{
  MessageBox.Show("Uvedené jméno je Martin !");
}
else if (a == "Milan")
{
  MessageBox.Show("Uvedené jméno je Milan, ne Martin !");
}

Abychom mohli s pomocí podmínek ošetřit úplně všechny možnosti, které mohou nastat, potřebujeme ještě jednu konstrukci, která se postará o provedení kódu v případě, že neplatí žádná z výše uvedených podmínek. Tato konstrukce se značí else a nemá samozřejmě žádnou podmínku

Opět v interpretaci s našimi jmény bychom vytvořili nějaký takovýto zdrojový kód.

string a; // Proměnná, s níž budeme pracovat
if (a == "Martin")
{
  MessageBox.Show("Uvedené jméno je Martin !");
}
else if (a == "Milan")
{
  MessageBox.Show("Uvedené jméno je Milan, ne Martin !");
}
else
{
  MessageBox.Show("Uvedené jméno není Milan, ani Martin !");
}

Příklad nakonec

Dnešní příklad již nebude mít daleko k jednoduché hře. Budeme generovat náhodná čísla v rozhraní od 0 do 10 a uživatele necháme hádat, o jaké číslo se jedná.

Uživatelské rozhraní bude tvořit jedno tlačítko a jedno textové pole, do kterého uživatel bude zadávat jeho tipy. Vytvořme událostní proceduru kliknutí na tlačítko (onClick) a jdeme programovat.

Algoritmus není nikterak složitý. Nejdříve vygenerujeme náhodou hodnotu a uložíme si ji do proměnné (např. i). Potom porovnáme hodnoty textového pole (textBox1.Text) a naší proměnné a s pomocí vyskakovacího okna necháme uživateli vypsat, jestli se trefil, nebo ne.

int i = new Random().Next(0, 10);
if (Convert.ToInt32(textBox1.Text) == i)
{
  MessageBox.Show("Trefa, dobrá práce !");
}
else
{
  MessageBox.Show("To není ono, zkus to ještě jednou !");
}

na závěr

K tomuto dílu je to vše. Za domácí úkol si můžete vyzkoušet například sestrojitelnost trojúhelníku, nebo vylepšit dnešní ukázkový příklad o zaznamenávání výsledků a na jejich základě sestavovat statistiky.