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í | ||
IČ | 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 |
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.