Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

5. diel - Podmienky (vetvenia)

V predchádzajúcom cvičení, Riešené úlohy k 4. lekcii C # .NET, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.

V minulej lekcii C # .NET kurzu, Riešené úlohy k 4. lekcii C # .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ý C # tutoriál. Vytvoríme program na výpočet odmocniny a vylepšíme našu kalkulačku.

Podmienky

VC # sa podmienky píšu úplne rovnako, ako vo všetkých Clik jazykoch, pre začiatočníkov samozrejme vysvetlím. Pokročilejšie sa asi budú chvíľku nudiť :)

Podmienky zapisujeme pomocou kľúčového slova if , za ktorým nasleduje logický výraz. 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. Vyskúšajme si to:

if (15 > 5)
    Console.WriteLine("Pravda");
Console.WriteLine("Program tu pokračuje ďalej");
Console.ReadKey();

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

Console.WriteLine("Zadaj nejaké číslo");
int a = int.Parse(Console.ReadLine());
if (a > 5)
    Console.WriteLine("Zadal si číslo väčšie ako 5!");
Console.WriteLine("Ďakujem za zadania");
Console.ReadKey();

Ukážme si teraz relačné operátory, ktoré môžeme vo výrazoch používať:

operátor C-like Zápis
rovnosť ==
Je ostro väčšia >
Je ostro menšia <
Je väčšie alebo rovné > =
Je menšie alebo rovné <=
nerovnosť ! =
Všeobecná negácia !
Rovnosť zapisujeme dvoma == preto, aby sa to neplietlo s bežným priradením do premennej, ktoré sa robí len jedným = . Ak chceme nejaký výraz znegovat, napíšeme ho do zátvorky a pred neho výkričník. Keď budeme chcieť vykonať viac než len jeden príkaz, musíme príkazy vložiť do bloku zo zložených zátvoriek:
Console.WriteLine("Zadaj nejaké číslo, z ktorého spočítám odmocninu:");
int a = int.Parse(Console.ReadLine());
if (a > 0)
{
    Console.WriteLine("Zadal si číslo väčšie ako 0, to znamená, že ho môžem odmocniť!");
    double o = Math.Sqrt(a);
    Console.WriteLine("Odmocnina z čísla " + a + " je " + o);
}
Console.WriteLine("Ďakujem za zadania");
Console.ReadKey();

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 druhú odmocninu 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:

Console.WriteLine("Zadaj nejaké číslo, z ktorého spočítám odmocninu:");
int a = int.Parse(Console.ReadLine());
if (a > 0)
{
    Console.WriteLine("Zadal si číslo väčšie ako 0, to znamená, že ho môžem odmocniť!");
    double o = Math.Sqrt(a);
    Console.WriteLine("Odmocnina z čísla " + a + " je " + o);
}
if (a <= 0)
    Console.WriteLine("Odmocnina zo záporného čísla neexistuje!");
Console.WriteLine("Ďakujem za zadania");
Console.ReadKey();

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

Console.WriteLine("Zadaj nejaké číslo, z ktorého spočítám odmocninu:");
int a = int.Parse(Console.ReadLine());
if (a > 0)
{
    Console.WriteLine("Zadal si číslo väčšie ako 0, to znamená, že ho môžem odmocniť!");
    double o = Math.Sqrt(a);
    Console.WriteLine("Odmocnina z čísla " + a + " je " + o);
}
else
    Console.WriteLine("Odmocnina zo záporného čísla neexistuje!");
Console.WriteLine("Ďakujem za zadania");
Console.ReadKey();

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é. V prípade viac príkazov by bol za else opäť blok { } .

Kľúčové slovo 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 vetvy 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 , dosadíme tam 1 , ak 1 , dosadíme 0 ). Naivne by sme mohli kód napísať takto:

int a = 0; // do a si priradíme na začiatku 0

if (a == 0) // ak je a 0, dáme do neho jedničku
    a = 1;
if (a == 1) // ak je a 1, dáme doňho nulu
    a = 0;

Console.WriteLine(a);
Console.ReadKey();

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 .

int a = 0; // do a si priradíme na začiatku 0

if (a == 0) // ak je a 0, dáme do neho jedničku
    a = 1;
else // ak je a 1, dáme doňho nulu
    a = 0;

Console.WriteLine(a);
Console.ReadKey();

Podmienky je možné skladať a to pomocou dvoch základných logických operátorov:

operátor C-like Zápis
A zároveň &&
alebo | \
Uveďme si príklad:
Console.WriteLine("Zadajte číslo v rozmedzí 10-20:");
int a = int.Parse(Console.ReadLine());
if ((a >= 10) && (a <= 20))
    Console.WriteLine("Zadal si správne");
else
    Console.WriteLine("Zadal si zle");
Console.ReadKey();

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

Console.WriteLine("Zadajte číslo v rozmedzí 10-20 alebo 30-40:");
int a = int.Parse(Console.ReadLine());
if (((a >= 10) && (a <= 20)) || ((a >=30) && (a <= 40)))
    Console.WriteLine("Zadal si správne");
else
    Console.WriteLine("Zadal si zle");
Console.ReadKey();

Switch

Konštrukcia switch je prevzatá z jazyka C (ako väčšina gramatiky C #). Umožňuje nám 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 switch e by sme napísali kód podobný tomuto:

Console.WriteLine("Vitajte v kalkulačke");
Console.WriteLine("Zadajte prvé číslo:");
float a = float.Parse(Console.ReadLine());
Console.WriteLine("Zadajte druhé číslo:");
float b = float.Parse(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");
int volba = int.Parse(Console.ReadLine());
float vysledek = 0;
if (volba == 1)
    vysledek = a + b;
else
if (volba == 2)
    vysledek = a - b;
else
if (volba == 3)
    vysledek = a * b;
else
if (volba == 4)
    vysledek = a / b;
if ((volba > 0) && (volba < 5))
    Console.WriteLine("Výsledok: {0}", vysledek);
else
    Console.WriteLine("Neplatná voľba");
Console.WriteLine("Ďakujem za použitia kalkulačky, aplikáciu ukončíte ľubovoľnou klávesou.");
Console.ReadKey();

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, C # 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ľ C # 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 switch e:

Console.WriteLine("Vitajte v kalkulačke");
Console.WriteLine("Zadajte prvé číslo:");
float a = float.Parse(Console.ReadLine());
Console.WriteLine("Zadajte druhé číslo:");
float b = float.Parse(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");
int volba = int.Parse(Console.ReadLine());
float vysledek = 0;
switch (volba)
{
    case 1:
        vysledek = a + b;
    break;
    case 2:
        vysledek = a - b;
    break;
    case 3:
        vysledek = a * b;
    break;
    case 4:
        vysledek = a / b;
    break;
}
if ((volba > 0) && (volba < 5))
    Console.WriteLine("Výsledok: {0}", vysledek);
else
    Console.WriteLine("Neplatná voľba");
Console.WriteLine("Ďakujem za použitia kalkulačky, aplikáciu ukončíte ľubovoľnou klávesou.");
Console.ReadKey();

Vidíme, že kód je trochu prehľadnejšie. Ak by sme potrebovali v nejakej vetve switch e spustiť viac príkazov, prekvapivo ich nebudeme písať do {} bloku, ale rovno pod seba. Blok {} nám tu nahrádza príkaz break , ktorý spôsobí vyskočeniu z celého switch e. Konštrukcia switch môže miesto case x: obsahovať ešte možnosť default: , ktorá sa vykoná v prípade, že nebude platiť žiadny case . Je len na vás, či budete switch používať, všeobecne sa oplatí len pri väčšom množstve príkazov a vždy ide nahradiť sekvencií if a else . Nezabúdajte na break y. Samozrejme je možné použiť switch aj pre hodnoty string ové premennej.

To by sme mali. V budúcej lekcii, Riešené úlohy k 5. lekcii C # .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 C # .NET, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 1333x (45.8 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Predchádzajúci článok
Riešené úlohy k 4. lekcii C # .NET
Všetky články v sekcii
Základné konštrukcie jazyka C # .NET
Preskočiť článok
(neodporúčame)
Riešené úlohy k 5. lekcii C # .NET
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
9 hlasov
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity