csharp.aspone.cz csharp.aspone.cz

Podmínky

Podmínka vlastně funguje tím způsobem, že vyhodnotí výraz a když je pravdivý, provede se tělo podmínky a když nikoliv skončí a nebo veme jinou variantu.

Existují základní tři typy zápisů:

    if (podmínka) {
        příkazy1;
    }

nebo

    if (podmínka) {
        příkazy1;
    }
    else if (další podmínka) {
        příkazy2;
    }
    else {
        příkazy3;
    }

anebo

    if (podmínka) {
        příkazy1;
    }
    else { 
        příkazy2;
    }

První možností je tzv. neúplné if, druhá jako úplné if, třetí je též úplné.
Za slovem if je v závorkách napsaná podmínka. Pak následuje skupina příkazů ve složených závorkách, zde označená příkazy1. Pak ještě může obsahovat slovo else a za ním další skupina příkazů ve složených závorkách příkazy2.
Takže program nejprve vyhodnotí podmínku, je-li splněna provede příkazy1 a při variantě s else přeskočí variantu jedna a provede příkazy2. Není-li podmínka splněna přeskočí příkazy1 a buď skončí a nebo jestli jsme použili variantu s else, tak použi příkazy2.

Podmínky if a else

Tento jednoduchý příklad demonstruje použití podmínečného vyhodnocování. První if nám říká, když je číslo v proměnné i rovno nule, tak se provede blok pod if. Else if - nebo když je číslo jednička tak proveď blok kódu, který vypíše jen zadali jste jedničku. Nebo když neplatí nic předtím, tak proveď poslední blok kódu.

using System;

class Program
{

    static void Main()
    {
        Console.WriteLine("Zadejte číslo 0 nebo 1");
        int i = int.Parse(Console.ReadLine());
        if (i == 0)
        {
            Console.WriteLine("Zadali jste nulu");
        }
        else if (i == 1)
        {
            Console.WriteLine("Zadali jste jedničku");
        }
        else
        {
            Console.WriteLine("Zadali jste jine cislo");
        }
    }
}

Další příklad

Na tomto dalším příkladě je vidět vyhodnocování podmínek. Načetl jsem číslo do proměnné i. Dále je zde metoda Main, v ní jsem použil podmínky if k tomu, abych rozlišil číslo od 0 do 100 a else if od 100 do 200 a pro ostatní než v tomto rozsahu jsem zadal výjimku. Tento zápis říká, je i větší než nula a zároveň menší, nebo rovno stu. Nebo je číslo větší než i a zároveň je menší než 200?

using System;

class Program
{

    static void Main()
    {
        // konzole nám napíše, ať zadáme číslo
        Console.WriteLine("Zadejte číslo v rozsahu od 0 do 100 nebo od 100 do 200");
        
        // konzole načte číslo do proměnné i
        int i = int.Parse(Console.ReadLine());
        
        // pokud je proměnná i v rozmezí 0-100, tak to vypíše
         if (i > 0 && i <= 100)
        {
            Console.WriteLine("Zadali jste cislo v rozahu od 0 do 100, konkretne {0}", i);
        }

        // pokud je proměnná i v rozmezí 100-200, tak to vypíše
        else if (i > 100 && i < 200)
        {
            Console.WriteLine("Zadali jste cislo v rozsahu od 100 do 200, konkretne {0}", i);
        }

        // v posledním případě (pokud není v rozsahu), tak vyhodíme výjimku
        else 
        {
            throw new Exception("Spatne_zadani_rozsahu");
        }
    }
}

Další příklad je totožný s předchozím, s tím rozdílem, že jsem výjimku dal ještě před samotné rozdělení mezi 0 - 100 a 100 - 200, takže když zadám číslo v jiném rozsahu, tak se vyhodnotí nejprve výjimka a program skončí.

using System;

class Program
{
    static void Main()
    { 
        Console.WriteLine("Zadejte číslo v rozsahu od  0 do 100 nebo od 100 do 200");
        int i = int.Parse(Console.ReadLine());
        
        if (!(i > 0 && i <= 200)) {
            throw new Exception("Nezadali jste cislo v platnem rozsahu");
        }

        if (i > 0 && i <= 100)
        {
            Console.WriteLine("Zadali jste cislo v rozahu od 0 do 100, konkretne {0}", i);
        }

        else 
        {
            Console.WriteLine("Zadali jste cislo v rozsahu od 100 do 200, konkretne {0}", i);
        }
        
    }
}

Zkrácené vyhodnocování podmínky (||) - NEBO

Zde vidíme zkrácené vyhodnocování podmínky NEBO. Funguje to na tomto principu: podminínka je splněna, vždy když je alespoň jedna z nich platná. Když není ani jedna, podmínka neplatí. Takže stačí aby platila pouze jedna strana. Zde v první příkladě se porovnává proměnná i s inicializací 4, s hodnotou 5 a to jest neplatné. V druhé části proměnná j s inicializací 1, zvýšenou však o prefix. Takže hodnota proměnné je 2, ale to pořádně nejde porovnat s číslem 3, proto je i druhá strana neplatná.

V druhé podmínce jsou zrovna pravdivé obě proměnné. Probíhá to stejným způsobem. Myslím si, že stačí pouze vědět, že proměnná i s inicializací 5, je v porovnání také 5 a dál to program neřeší a provede tělo podmínky. Ovšem, kdyby to nebyla pravda, tak se zkusí pravá strana a zde by to v tomto případě také byla pravda, jelikož by j s inicializací 2, mělo v prefixu hodnotu 3 a podmínka by byla tatkéž splněna.

using System;

class vyhodnocovaniPodminkyNebo
{
    static void Main()
    {
    int i, j;
    i = 4;
    j = 1;

    Console.WriteLine("Podmínka : (i == 5 || ++j == 3)\n\n");
    Console.WriteLine("Před podmínkou : i = {0}, j = {1}", i, j);

    if (i == 5 || ++j == 3)
    {
        Console.WriteLine("Podmínka je platná");
    }
    else Console.WriteLine("Podmínka je neplatná");

    Console.WriteLine("Po podmínce i = {0}, j = {1}", i, j);

    i = 5;
    j = 2;

    Console.WriteLine("\nPřed podmínkou : i = {0}, j = {1}", i, j);

    if (i == 5 || ++j == 3)
    {
        Console.WriteLine("Podmínka je platná");
    }
    else Console.WriteLine("Podmínka je neplatná");


    }

Zkrácené vyhodnocování podmínky (&&) - A ZÁROVEŇ

Zde musí být splněny podmínky na obouch stranách, jinak se podmíněný příkaz if neprovede. Je to ten samý příklad, který je uveden shora u zkráceného vyhodnocovaní podmínky nebo, takže není co vysvětlovat.

using System;
class zkraceneVyhodnocovaniPodminky_a_zaroven
{
    static void Main()
    {
        int i, j;
        i = 4;
        j = 1;

        Console.WriteLine("Podminka: (i == 5 && ++j == 3) \n\n");
        Console.WriteLine("Před podmínkou: i = {0}, j = {1}", i, j);
        if (i == 5 && ++j == 3)
        {
            Console.WriteLine("Podmínka je platná");
        }
        else Console.WriteLine("Podmínka je neplatná");
        Console.WriteLine("Po podmínce: i = {0}, j = {1}\n\n", i, j);

        i = 5;
        j = 2;

        Console.WriteLine("Před podmínkou: i = {0}, j = {1}", i, j);
        if (i == 5 && ++j == 3)
        {
            Console.WriteLine("Podmínka je platná");
        }
        else Console.WriteLine("Podmínka je neplatná");
        Console.WriteLine("Po podmínce: i = {0}, j = {1}\n\n", i, j);

    }

}

Načtení znaku a jeho začlenění

V tomto kódu jsme opět četli ze standartního vstupu, načtený znak jsme ovšem převedli na char a pak v metodě Main jsme určili pomocí podmínek zda se jedná o číslo, malé písmeno, velké písmeno, či ostatní.

using System;

class pracuji
{
    static void Main()
    {
        Console.WriteLine("Zadejte jeden znak a pak stiskněte \"ENTER\" ");


        char k = char.Parse(Console.ReadLine());

        if (k >= '0' && k <= '9')
        {
            Console.WriteLine("Zadali jste číselnou hodnotu: {0}", k);
        }
        else if (k >= 'a' && k <= 'z')
        {
            Console.WriteLine("Zadali jste malé písmeno: {0}", k);
        }
        else if (k >= 'A' && k <= 'Z')
        {
            Console.WriteLine("Zadali jste velké písmeno: {0}", k);
        }
        else
        {
            Console.WriteLine("Zadali jste znak, nejspíše interpunkční: {0}", k);
        }
    }
}