6. Logické a relační operátory

Pro vytváření výrazů využíváme logické operátory – viz Tabulka 1.

Operátor

Operace

Příklad

&&

Logický součin – konjunkce (klávesová zkratka na české klávesnici: Alt+38 … nebo … AltGr+C)

((x < y) && (y < z))
(Výsledek je Pravda, pokud platí x < y  a zároveň y  < z, jinak je výsledek Nepravda)

||

Logický součet – disjunkce (klávesová zkratka na české klávesnici: Alt+124 … nebo … AltGr+w)

((x < y) || (y < z))
(Výsledek je Pravda, pokud platí x < y, nebo y < z, jinak je výsledek Nepravda)

!

Negace

! (x > y)
(Výsledek je Pravda, pokud neplatí, že x > y, jinak je výsledek Nepravda)

Tabulka 2: Logické operátory


Následující tabulka obsahuje možné hodnoty, kterých může nabývat logická proměnná– true, tj. pravda vs false, tj. nepravda - viz Tabulka 2. Ve sloupcích jsou umístěny logické a relační operátory, jejichž aplikací na hodnoty těchto proměnných získáme výsledek. Pro zjednodušení si představte namísto false hodnotu 0 a namísto true hodnotu 1. Pak již u operátoru && stačí násobit (logický součin – konjunkce) nebo v případě || hodnoty sčítat (logický součet – disjunkce – pozor 1 + 1 je v tomto případě 1. Hodnota totiž může být 0 nebo 1). Poslední sloupec v tabulce znázorňuje porovnání hodnot dvou logických proměnných. V C# lze pro relační operace použít porovnání metoda CompareTo, která navrací celočíselnou hodnotu výsledku.

x

y

x && y

x || y

! (x)

x == y

x <= y

false

false

false

false

true

true

true

false

true

false

true

true

false

true

true

false

false

true

false

false

false

true

true

true

true

false

true

true

Tabulka 2: Logické a relační operátory


Je také vhodné zmínit zajímavou vlastnost označovanou jako zkrácené vyhodnocení (anglicky „Short Circuiting“) logického operátoru && pro konjunkci (logický součin), nebo česky řečeno operátoru „a zároveň“. Pokud jsou tímto operátorem spojeny dva operandy např. podmínky, není zapotřebí vyhodnocovat obě, protože pokud je levá podmínka vyhodnocena jako false, je celý výsledek těchto dvou podmínek false, bez ohledu na pravou podmínku. Uveďme příklad:

Stejná vlastnost platí i pro logický operátor disjunkce (logického součtu), neboli operátoru „nebo“. Pokud je použit operátor || spojující dva operandy a levý operand např. podmínka má hodnotu true, pak je výsledek celého výrazu true nezávisle na hodnotě pravé podmínky.

Z předchozích tvrzení si logicky odvodíme, že už není zapotřebí vyhodnocovat pravý operand. Pokud tedy použijete logické operátory a chcete se vyhnout zbytečnému vyhodnocování logických výrazů, umísťujte na levou stranu podmínkového logického operátoru jednoduše a rychle vyhodnotitelné logické výrazy a na pravou stranu ty složitější. [6]


Ilustrativní příklad LogickySoucin

Algoritmus LogickySoucin

  • Popis: Vývojový diagram s použitím logických a relačních operátorů
  • Zadání: Zkuste vymyslet, jak byste zaznamenali v hlavním programu příklad úplného větvení příkazu if. Deklaruje tři celočíselné lokální proměnné x a y a z. Proměnným přiřaďte následující hodnoty: x = 2, y = 3 a z = 4. Deklarujte také logickou proměnnou boolPromenna. Pokud platí že x < y a zároveň y < z pak do logické proměnné uložte hodnotu true. V opačném případě do logické proměnné uložte hodnotu false.


Rozhodovací blok v algoritmu obsahuje logický výraz (testovanou podmínku, která se skládá ze dvou částí). První část logické výrazu (x < y) v rozhodovacím bloku je splněna, tj. (2 < 3). Zároveň také došlo ke splnění druhé části logického výrazu (y < z), tj. (3 < 4). Protože první část logického výrazu nabyla hodnoty true a zároveň druhá část výrazu také nabyla hodnoty true, logický součin ve formě operátoru && navrací výsledek true (můžeme si představit aritmetickou operaci 1 * 1 = 1). Musí být tedy vykonán přiřazovací příkaz umístěný ve větvi True. Po přiřazení hodnoty logické proměnné následně dojde k vypsání její hodnoty, tedy true. 

Program LogickySoucin
  • Popis: Zdrojový kód úplného větvení s použitím logických a relačních operátorů
  • Zadání: Vymyslete, jak byste v C# naprogramovali v hlavní metodě Main algoritmus LogickySoucin jako konzolovou aplikaci
  • Řešení: Bude postupně probráno v následujícím textu


V následujícím kódu jsou použity 3 celočíselné proměnné a jedna logická proměnná datového typu bool – viz Kód 1. Z příkazu if vycházejí dvě větve. Pokud složená podmínka platí, pak se provede v kódu příkaz pod podmínkou. Pokud podmínka neplatí, provede se kód za else. Uvnitř podmínky jsme použili operátor logického součinu &&, kde musí platit zároveň obě definované části logického výrazu.

static void Main(string[] args)
{
    //Deklarace celočíselné proměnné včetně inicializace
    int x = 2;
    //Deklarace celočíselné proměnné včetně inicializace
    int y = 3;
    //Deklarace celočíselné proměnné včetně inicializace
    int z = 4;
    //Deklarace logické proměnné
    bool boolPromenna;
    //Rozhodovací podmínka - platí tvrzení?
    if ((x < y) && (y < z))
        //Přiřazení hodnoty logické proměnné - pravda
        boolPromenna = true;
    else
        //Přiřazení hodnoty logické proměnné - nepravda
        boolPromenna = false;
    //Výpis výsledné hodnoty logické proměnné
    Console.WriteLine("Výsledek je: {0}", boolPromenna);
    //Čekání na stisk klávesy -> ukončení programu
    Console.ReadKey();
}

Kód 1: Příklad logického součinu

Na následujícím výpisu v konzoli vidíme výsledek rozhodování – viz Výstup programu - Kód 1.

Výsledek je: True

Výstup programu - Kód 1: Ukázka výsledku u příkladu logického součinu