dum | žák

Programování C#

Název školy Vyšší odborná škola obalové techniky a Střední škola, Štětí, příspěvková organizace
Adresa školky Kostelní 134, 411 08 Štětí
46773509
Název operačního programu OP Vzdělávání pro konkurenceschopnost
Registrační číslo CZ.1.07/1.5.00/34.1006
Označení vzdělávacího materiálu VY_32_INOVACE_23_PRG_454
Název tématické oblasti (sady) Programování
Název materiálu A zároveň
Anotace Text představuje logický operátor součinu. Na příkladu demonstruje jeho nasazení, výsledkem čehož je přehlednější a čitelnější kód. Jsou ukázána dvě řešení úlohy – pomocí dosavadních znalostí, jejichž výsledkem je neefektivní a nepřehledný kód. Druhé řešení používá logický součin.
Autor Ivan Pomykacz Jazyk čeština
Očekávaný výstup Přečte výraz poskládaný z logických součinů.
Klíčová slova logický součin
Druh výukového zdroje Výklad Věková skupina žáků 15+
Typ interakce aktivita Ročník 1.
Speciální vzdělávací potřeby žádné
Zhotoveno, (datum/období) 11.10.2013 Celková velikost

pdf icon
A zároveň

Obsah

Shrnutí

Podmínky je možné spojovat (nikoli řetězit jako v případě if-else-if) pomocí logických operátorů AND a OR. To ve výsledku usnadňuje i zpřehledňuje zápis kódu.

Dilema

Žena povídá svému muži, který se živí programováním: „Běž koupit do obchodu 6 rohlíků, a když budou mít vejce, kup jich 20“.

Zřejmě každý správný programátor z výše uvedeného vyvodí, že když budou mít v obchodě alespoň jedno vejce, měl by koupit 20 rohlíků.

Implementace problému

Proveďme deklaraci proměnných, které budou simulovat zboží na krámě. Zrovna tyto proměnné nastavme na kladnou hodnotu, která udává množství daného zboží.

int rohliky = 16;
int vejce = 21;
 
Console.WriteLine(" zboží   |   množství ");
Console.WriteLine("----------------------");
Console.WriteLine("rohlíky  |     {0} ks", rohliky);
Console.WriteLine("vejce    |     {0} ks", vejce);

Nyní napíšeme podmínku, která podpoří programátora a pomůže mu se rozhodnout, čeho má kolik koupit.

if (vejce > 0) {
    Console.WriteLine("Kup 20 rohlíků.");
    rohliky-= 20;
}
else {
    Console.WriteLine("Kup 6 rohlíků.");
    rohliky-= 6;
}
 
Console.WriteLine("Zůstatek rohlíků: {0}", rohliky);

Podmínka hovoří jasně. Budou-li mít alespoň jedno vejce, kupuji 20 rohlíků. V opačném případě jich beru jen 6.

Na konci je vypsáno, kolik rohlíků zbylo. Patrně jste si všimli zápisu rohliky -= 20. Jde o zkrácený zápis rohliky = rohliky - 20.

Vylepšení

Co když ale nebudou mít skladem všech 20 rohlíků? Nebo dokonce ani těch 6?

To jsou stavy, které mohou nastat a jen by zbytečně našemu programátorovi popletly hlavu. Proto si pomocí podmínek pohlídáme, že na krámě mají dostatečné množství rohlíků.

if (vejce > 0) {
    if (rohliky >= 20) {
        Console.WriteLine("Kup 20 rohlíků.");
        rohliky-= 20;
    }
    else {
        Console.WriteLine("Nemají dost rohlíků.");
    }
}
else {
    if (rohliky >= 6) {
        Console.WriteLine("Kup 6 rohlíků.");
        rohliky-= 20;
    }
    else {
        Console.WriteLine("Nemají dost rohlíků.");
    }
}

Patrně jste si všimli, že jsme "opět" museli přizvat stádo if-ů, abychom mohli problém dostatečně ošetřit. Navíc se nám v kódu opakuje ta samá hláška, totiž že není dostatek rohlíků.

A zároveň - &&

Pokud máme více podmínek, které musí být splněny zároveň (současně), jako u výše probíraného příkladu, totiž že:

  • mají-li vejce ... a

  • je dost rohlíků

případně

  • vejce nemají ... a

  • je dost rohlíků

Pak můžeme tyto podmínky spojit do jediného výrazu pomocí tzv. logického součinu AND - &&.

if (vejce > 0 && rohliky >= 20) {
    Console.WriteLine("Kup 20 rohlíků.");
    rohliky-= 20;
}
else if (vejce == 0 && rohliky >= 6) {
    Console.WriteLine("Kup 6 rohlíků.");
    rohliky-= 6;
}
else {
    Console.WriteLine("Nemají dost rohlíků.");
}
 

Výsledek je, že pokud mají alespoň jedno vejce vejce > 0, a zároveň && mají dostatek rohlíků rohliku >= 20, pak je podmínka splněna, a je tedy možné koupit 20 rohlíků.

Nebo jestliže else if, pokud nemají vejce vejce == 0, a zároveň mají dostatek rohlíků rohliku >= 6, pak je podmínka splněna, a je tedy možné koupit 6 rohlíků.