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_455
Název tématické oblasti (sady) Programování
Název materiálu A nebo
Anotace Text představuje logický operátor součtu. 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čet.
Autor Ivan Pomykacz Jazyk čeština
Očekávaný výstup Přečte výraz poskládaný z logických součtů. Chápe významu logický součet – nebo.
Klíčová slova logický součet
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í) 18.10.2013 Celková velikost

pdf icon
A nebo

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.

V praxi je možné se setkat ještě dalším typem spojení podmínek. Totiž chceme-li, aby alespoň jedna z podmínek byla splněna (nikoli všechny současně).

Dilema

Ocitli jsme se na klinice v městské nemocnici. Stojíme v chodbě, kde na jejím konci jsou dvoje dveře. Jedny dveře vedou doprava a druhé doleva.

Kterými dveřmi se vydáte?

Implementace problému

Rozepišme program, který alespoň trošičku bude simulovat old school textovou hru.

Console.WriteLine("Nacházíš se v nemocnici. Stojíš v chodbě na jejímž konci jsou dvoje dveře.");
Console.WriteLine("Chceš se vydat dveřmi vlevo nebo vpravo? ");
 
string volba = Console.ReadLine();

Necháme uživatele aby zapsal svou odpověď z klávesnice Console.ReadLine(). A nyní se rozhodneme, co se bude dít dál.

if (volba == "vlevo") {
    Console.WriteLine("Vstupuješ dveřmi nalevo do obrovské haly.");
}
else if (volba == "vpravo") {
    Console.WriteLine("Dveřmi vpravo sestupuješ po táhlém schodišti někam dolů do sklepení.");
}
else {
    Console.WriteLine("Neznámá volba ..");
}

Vylepšení

Co když bychom chtěli uživateli ulehčit psaní? To aby nemusel pracně vypisovat "vlevo", resp. "vpravo". Mohli bychom použít třeba anglická počáteční písmena "l" -> left a "r" -> right.

Chceme ale zachovat i původní chování - uživatel může uvést celou odpověď, ale zároveň může zadat jako odpověď jen jedno písmenko.

if (volba == "vlevo") {
    Console.WriteLine("Vstupuješ dveřmi nalevo do obrovské haly.");
}
else if (volba == "l") {
    Console.WriteLine("Vstupuješ dveřmi nalevo do obrovské haly.");
}
else if (volba == "vpravo") {
    Console.WriteLine("Dveřmi vpravo sestupuješ po táhlém schodišti někam dolů do sklepení.");
}
else if (volba == "r") {
    Console.WriteLine("Dveřmi vpravo sestupuješ po táhlém schodišti někam dolů do sklepení.");
}
else {
    Console.WriteLine("Neznámá volba ..");
}

Ano, nezbude nám nic jiného, než připsat další if-else do stáda. To by ale tak nevadilo jako spíš to, že musíme některé části kódu celé zopakovat. V programování však opakování kódu vede k záhubě programátora. Toto řešení je naprosto nepřijatelné - a to jak záhuba, tak opakování se.

A nebo - ||

Pokud máme více podmínek, u kterých nám stačí alespoň u jedné aby výsledek byl true, jako u výše probíraného příkladu, totiž že:

  • uživatel napsal "vlevo" ... a nebo

  • uživatel napsal "l"

případně

  • uživatel napsal "vpravo" ... a nebo

  • uživatel napsal "r"

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

if (volba == "vlevo" || volba == "l") {
    Console.WriteLine("Vstupuješ dveřmi nalevo do obrovské haly.");
}
else if (volba == "vpravo" || volba == "r") {
    Console.WriteLine("Dveřmi vpravo sestupuješ po táhlém schodišti někam dolů do sklepení.");
}
else {
    Console.WriteLine("Neznámá volba ..");
}

Výsledek je, že pokud řetězec volba == "vpravo" nebo || řetězec volba == "r", pak je podmínka splněna.

Nebo jestliže else if, pokud řetězec volba == "vlevo" nebo || řetězec volba == "l", pak je podmínka splněna.