if, else if, else, porovnávací operátory, &&, ||, !, switch, switch expressionbool — dnes se z bool konečně stane rozhodnutí.Tenhle blok je jen pro vás — dětem ho nepromítejte.
| Fáze | Co se děje | Čas |
|---|---|---|
| Rozjezd | Kontrola domácího úkolu, „komu program spadl a proč?" | 10 min |
První if |
Bloky Program se musí rozhodnout a Porovnáváme | 25 min |
| Větve | else, else if, pořadí podmínek, semafor zdraví |
30 min |
| Spojky | &&, ||, ! a tabulka pravdivosti na prstech |
20 min |
switch |
Rozcestník a moderní switch expression |
15 min |
| Ukázky | Demo 1–5, hlavně demo 5 (křižovatka v jeskyni) | 15 min |
| Cvičení | Děti pracují samy, vy obcházíte | 45 min |
| Závěr | Kdo chce, ukáže svoje rozhodování | 5 min |
Dnešek stojí a padá na jediném uvědomění: podmínka se ptá, ne přiřazuje.
zivoty = 0 nastaví životy na nulu. zivoty == 0 se zeptá, jestli jsou nulové.
Jedno rovnítko versus dvě. Tohle rozliší dobrého programátora od zoufalce
a dnes je na to ten správný den.
Druhý cíl: pořadí podmínek má význam. Když se nejdřív zeptáš „je to víc než 0?", už se nikdy nedozvíš, jestli to není víc než 50. Nechte je na to narazit vlastní chybou — je to nezapomenutelné.
? :. Je lákavý a krátký, ale děti si ho pletou
s podmínkou a přestanou psát čitelný kód. Nechte si ho na později.switch s when, vzory a rozsahy. Ukážeme jen switch podle hodnoty
a jednoduchý switch výraz. Pattern matching přijde za pár hodin.&& nevyhodnotí pravou stranu). Je to pravda
a je to důležité, ale dneska by to jen mátlo. Stačí „obě musí platit".Jak pracovat se smíšenou úrovní. Každé cvičení má tři stupně: Minimum,
Rozšíření, Výzva. Slabším stačí Minimum — tedy jeden if a jeden else.
Rychlíkům dávejte Výzvu s switch výrazem, ta je baví, protože vypadá „profi".
Doteď program dělal pořád to samé — řádek po řádku, shora dolů. Od téhle chvíle se umí rozhodnout: když něco platí, udělá jednu věc, když ne, udělá jinou (nebo nic).
Kulatá závorka za if obsahuje otázku, na kterou jde odpovědět
ano/ne — tedy bool. Když vyjde true, spustí se blok ve složených
závorkách. Když false, celý se přeskočí.
Zkus změnit 12 na 80 a spusť znovu. Varování zmizí, protože
80 < 20 je nepravda.
Řádek s výpisem životů je mimo složené závorky, takže se vypíše vždycky.
C# dovolí napsat if (zivoty < 20) Console.WriteLine("..."); bez závorek.
Nedělej to. Jakmile přidáš druhý řádek, program se začne chovat jinak,
než čekáš — a hledá se to hodiny. Vždycky složené závorky.
Uvnitř if se skoro vždycky něco porovnává. Operátorů je přesně šest:
| Operátor | Čte se | Příklad | Výsledek |
|---|---|---|---|
== |
rovná se | zivoty == 0 |
true, když jsou životy nula |
!= |
nerovná se | jmeno != "" |
true, když jméno není prázdné |
> |
je větší než | utok > obrana |
true, když útok přebije obranu |
< |
je menší než | zlato < cena |
true, když nemáš dost peněz |
>= |
je větší nebo rovno | uroven >= 10 |
true i při přesně desítce |
<= |
je menší nebo rovno | zivoty <= 0 |
true při nule i při minusu |
Všimni si, že porovnání se dá uložit do proměnné. Není na tom nic
kouzelného — utok > obrana je prostě hodnota typu bool, stejně jako
14 je hodnota typu int.
Díky tomu se dá napsat if (probil) a kód se čte skoro jako věta.
To je nejlepší způsob, jak udělat podmínky srozumitelné.
Zkus nastavit obě čísla na stejnou hodnotu a podívej se, co se stane.
= znamená ulož do. == znamená je rovno?
Když napíšeš if (zivoty = 0), C# tě naštěstí zastaví chybou
CS0029, protože int není bool. U proměnné typu bool tě ale
nezastaví nic a program bude tiše dělat blbosti. Hlídej si to.
Samotný if umí jen „udělej, nebo neudělej nic". Pomocí else
přidáš druhou možnost a pomocí else if klidně pátou.
Program jde shora dolů a zastaví se u první podmínky, která platí. Zbytek už ani nečte. Proto je pořadí tak důležité.
else na konci nemá závorku s otázkou — je to „ve všech ostatních
případech". Nemusí tam být, ale bez něj může nastat situace,
kdy se nevypíše nic.
Zkus postupně 0, 10, 50 a 100 a sleduj, která větev se chytí.
Kdyby byla první podmínka zivoty < 70, chytila by úplně všechno
pod sedmdesát — i nulu, i deset. Zprávu o smrti bys nikdy neviděl.
Pravidlo: řaď podmínky od nejpřísnější po nejvolnější.
Nejdřív <= 0, pak < 30, pak < 70, pak zbytek.
Často potřebuješ víc podmínek najednou. Na to jsou tři spojky:
| Zápis | Čte se | Platí, když |
|---|---|---|
a && b |
a zároveň b | platí obě |
a || b |
a nebo b | platí aspoň jedna |
!a |
ne a | a neplatí |
&& je přísné — stačí jedno false a je konec.
|| je velkorysé — stačí jedno true a platí.
! prostě otočí odpověď naruby.
Na prstech: && jsou dvě ruce (musíš mít obě),
|| je dvojí cesta (stačí jedna).
Zkus přehodit maKlic na false a sleduj, jak se změní všechny tři řádky.
a || b && c se vyhodnotí jako a || (b && c), protože && má přednost.
Je to matoucí. Když si nejsi jistý, napiš závorky — zdarma získáš
jistotu a kód se dá číst.
Když se pořád dokola ptáš na tu samou proměnnou (povolani == "mag",
povolani == "valecnik", …), je čitelnější použít switch.
Každá větev musí končit break, jinak C# ohlásí chybu CS0163.
default je „ve všech ostatních případech" — stejná role jako else.
switch použij, když se ptáš na jednu proměnnou a její konkrétní hodnoty.
if použij, když porovnáváš rozsahy (zivoty < 30) nebo kombinuješ podmínky.
Rozsahy do klasického switch nepatří.
Když z rozhodnutí potřebuješ jen hodnotu, jde to napsat mnohem
stručněji. Tenhle zápis se jmenuje switch výraz a v modernim C# se
používá pořád.
Rozdíly proti klasickému switch: proměnná je před slovem switch,
místo case se píše =>, místo default je podtržítko _
a celý výraz končí středníkem, protože vrací hodnotu.
Klasický switch dělá (vypisuje, počítá, volá).
switch výraz vrací jednu hodnotu, kterou si uložíš do proměnné.
Obojí je správně — vyber si podle toho, co potřebuješ.
Console.ReadLine() — jeden řádek na jedno čtení.Tohle je celá dnešní hodina v jednom programu: zeptat se, převést odpověď
na bool, zkombinovat spojkami a rozhodnout. Zkus do políčka stdin
napsat ne a 0 a podívej se, jak hra dopadne.
Tohle dětem neříkejte, ale hodí se to vědět, až se někdo zeptá.
Proč if potřebuje bool a ne číslo. V C i v C++ platí, že nenulové
číslo je „pravda". C# to zakázal schválně — právě proto, aby if (x = 5)
neprošlo. Chyba CS0029 („nelze převést int na bool") je tedy vlastnost,
ne buzerace. Když se dítě zeptá „proč to Python dovolí a C# ne?", tohle je odpověď.
&& versus &. Obě verze existují. && je zkrácené — když levá strana
neplatí, pravá se vůbec nevyhodnotí. & vyhodnotí obě vždycky. V praxi se
používá && a ||; jednoduché & a | potkají děti až u bitových operací.
Dneska o tom mlčte, ale kdyby někdo napsal & a fungovalo mu to, víte proč.
Proč switch vyžaduje break. V C a Javě se větve „propadají" do sebe,
což je nekonečný zdroj chyb. C# propadnutí zakázal a vynucuje explicitní
konec větve. Výjimka: dva case bezprostředně za sebou bez kódu mezi nimi
sdílet můžou (case "mag": case "carodej":).
switch výraz je od C# 8 (rok 2019). Podtržítko _ se jmenuje
discard pattern. Kompilátor kontroluje, že jsou pokryté všechny možnosti —
když nejsou a hodnota neodpovídá ničemu, program spadne na
SwitchExpressionException. Proto _ skoro vždycky pište.
Časté nedorozumění: if (a == b == c) v C# nefunguje tak, jak děti
čekají, a naštěstí většinou ani nezkompiluje. Řetězení porovnání zná
Python, C# ne — tam se to musí napsat jako a == b && b == c.
Odbočka pro zvídavé: hodnotu bool zabírá v paměti celý bajt, i když by
teoreticky stačil jeden bit. Důvod je rychlost — procesor pracuje s bajty.
zivoty na 0, 25, 69 a 70 a sleduj, která věta se vypíše.< na <= u hranice 30 a najdi hodnotu, kde je rozdíl vidět.Co si z toho odnést: program se zastaví u první podmínky, která platí. Proto se řadí od nejpřísnější po nejvolnější.
zivoty tak, aby se pruh složil jen ze dvou plných dílků.'█' a '░' za jiné, třeba '#' a '.'.DILKU na 10 a zkontroluj, že pruh pořád sedí.Co si z toho odnést: podmínka nemusí hned vypisovat. Může jen nastavit proměnnou, kterou vypíšeš až potom. Kód je díky tomu mnohem přehlednější.
3 na 10 a sleduj, kdo teď vyhrává.bool kritickyZasah = utok > obrana * 2; a vypiš hlášku.Co si z toho odnést: if bez else se hodí, když chceš jen něco přidat
za určité podmínky — tady bonus za štít.
povolani na "mag" a pak na "kuchar" a porovnej oba výpisy."zlodej" s vlastními hodnotami.break u jedné větve a přečti si chybu._ ve výrazu a podívej se, co kompilátor řekne.Co si z toho odnést: klasický switch dělá, switch výraz vrací.
Tři výrazy pod sebou nahradily devět ifů — a pořád se to dá číst.
vlevo, vpravo, rovne a doprdele a porovnej konce.VLEVO velkými písmeny — funguje to? A proč?0 a sleduj, které cesty se zavřou."zpet" s vlastním koncem.Console.ReadLine() — jeden řádek na jedno čtení.Co si z toho odnést: tohle je celá hodina v jednom programu — vstup,
převod na bool, switch výraz pro popis a if/else if pro rozhodnutí.
A hlavně: první podmínka je „nemáš světlo", protože bez něj je zbytek jedno.
Podmínky mají svoje typické chyby. Většina z nich se dá poznat podle hlášky.
| Hláška / projev | Co to znamená | Jak to spravit |
|---|---|---|
CS0029: Cannot implicitly convert type 'int' to 'bool' |
v if je přiřazení místo porovnání |
napiš == místo = |
CS0029: Cannot implicitly convert type 'string' to 'bool' |
v if je text místo otázky |
porovnej: if (odpoved == "ano") |
CS0163: Control cannot fall through from one case label to another |
chybí break na konci větve switch |
přidej break; do každé větve |
CS0152: The switch statement contains multiple cases with the label value |
dvakrát stejný case |
smaž duplicitní větev |
CS8509: The switch expression does not handle all possible values |
ve switch výrazu chybí _ |
přidej větev _ => ... |
CS1525: Invalid expression term 'else' |
else bez předchozího if, nebo středník za if (...) |
zkontroluj složené závorky a přebytečný ; |
CS0136 / CS0128 |
dvě proměnné stejného jména (často z out) |
přejmenuj jednu z nich |
| Vypíše se špatná větev | podmínky jsou ve špatném pořadí | seřaď od nejpřísnější po nejvolnější |
| Nevypíše se nic | žádná podmínka neplatí a chybí else |
přidej else jako záchrannou síť |
if (odpoved == "Ano") nefunguje |
porovnání textu rozlišuje velikost písmen | uprav vstup přes .ToLower() |
Program porovnává "10" > "9" divně |
porovnáváš texty, ne čísla | nejdřív převeď přes int.TryParse |
Nechte ji promítnutou celou dobu cvičení. Dnešní chyby jsou hodně „tiché" — kód se přeloží a běží, jen dělá něco jiného. Poslední čtyři řádky tabulky proto nemají kód chyby, ale popis projevu.
Nejčastější dnešní zážitek: „mně to vypisuje pořád to samé!" V devíti z deseti případů je to pořadí podmínek. Ptejte se: „která podmínka to chytla dřív?"
Tvoje zadání:
Program se zeptá na počet životů a řekne hráči, jak na tom je.
- Načti životy z klávesnice bezpečně přes
TryParse💡 Poradit
Otázku vypiš přesConsole.Writea načti přesint.TryParse(Console.ReadLine(), out int zivoty);.
Když hráč napíše nesmysl, zůstane v proměnné nula — a to je pro dnešek v pořádku.- Přidej první podmínku: životy nula nebo míň znamenají konec
💡 Poradit
Nejpřísnější podmínka patří nahoru:if (zivoty <= 0).
Do složených závorek dej výpis o tom, že hrdina padl.- Přidej větev pro kriticky raněného (méně než 30 životů)
💡 Poradit
Druhá větev se píše jakoelse if (zivoty < 30)hned za uzavírací závorku první větve.
Pozor na pořadí — tahle podmínka musí být až za nulou.- Dodělej zbylé větve a
elsena konci💡 Poradit
Přidej ještěelse if (zivoty < 70)a pak samotnéelsebez závorky s otázkou.elseje záchranná síť — chytne všechno, co neplatilo dřív.- Přidej pruh života a rámeček
💡 Poradit
Dílky spočítej jakozivoty * DILKU / MAX_ZIVOTY— nejdřív násob, pak děl.
Pruh složíš znew string('█', dilky) + new string('░', DILKU - dilky).
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–3 fungují a program pozná mrtvého i kriticky raněného |
| Rozšíření | Všechny čtyři větve včetně else |
| Výzva | Přidat pruh a hlášku „lektvar doporučen" jako samostatný if bez else |
Console.ReadLine() — jeden řádek na jedno čtení.Očekávaný výsledek: se vstupem 45 se vypíše pruh z devíti plných dílků,
hláška „Zraněný, ale pořád bojeschopný." a doporučení lektvaru.
Kde se zaseknou:
zivoty < 70 nahoru, nikdy neuvidí
ani smrt, ani kritický stav. Tohle je nejdůležitější chyba dneška —
nechte je na ni narazit a pak se ptejte, která podmínka to chytla dřív.if (...). if (zivoty <= 0); se přeloží a nic nedělá.
Kompilátor většinou jen varuje, takže je to zákeřné.if místo else if. Program pak vypíše dvě hlášky najednou.
Krásná ukázka rozdílu — nechte to schválně spustit.else if (zivoty < 30 && zivoty > 0). Není chyba, jen zbytečnost.
Ukažte, že zivoty <= 0 bylo vyřešeno už první větví.new string('█', -2) skončí výjimkou.
Ať to někdo zkusí a pak přemýšlí, jak to ohlídat.Kdo je hotový dřív: ať přidá pátou úroveň nebo ať pruh zkrátí na nulu
u záporných životů pomocí dalšího if.
Otázka na závěr cvičení: „Kolik větví se může vypsat naráz?"
U if/else if právě jedna. U samostatných ifů klidně všechny.
Console.ReadLine() — jeden řádek na jedno čtení.Tvoje zadání:
Do jeskyně se dostane jen ten, kdo má klíč a zároveň světlo. Nauč program kombinovat podmínky.
- Zeptej se, jestli má hráč klíč, a odpověď převeď na
bool💡 Poradit
Načti text a hned ho uprav:string odpoved = Console.ReadLine().Trim().ToLower();.
Pak porovnej:bool maKlic = odpoved == "ano";.- Zeptej se na počet pochodní a udělej z něj
bool maSvetlo💡 Poradit
Číslo načti přesint.TryParse(Console.ReadLine(), out int pochodne);.
Světlo máš, když je pochodní víc než nula:bool maSvetlo = pochodne > 0;.- Pusť hráče dovnitř, jen když má obojí
💡 Poradit
Obě podmínky najednou spojíš přes&&:if (maKlic && maSvetlo).
Jednofalsestačí k tomu, aby celá podmínka neplatila.- Dopiš zbylé tři možnosti přes
else ifaelse💡 Poradit
Použij vykřičník jako „ne":else if (maKlic && !maSvetlo).
Posledníelsechytne případ, kdy nemá ani klíč, ani světlo.- Přidej zkratku pro toho, kdo má lano nebo hodně pochodní
💡 Poradit
Stačí jedna z věcí, takže použij||:if (maLano || pochodne >= 5).
Tenhleifdej jako samostatný, aby se mohl vypsat i k ostatním hláškám.
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–3 fungují a program pozná, kdo má klíč i světlo |
| Rozšíření | Všechny čtyři kombinace přes && a ! |
| Výzva | Zkratka přes logické NEBO plus přehledová tabulka stavu na konci |
Console.ReadLine() — jeden řádek na jedno čtení.Očekávaný výsledek: se vstupem ano / 2 / ano se otevře brána
a navíc se vypíše hláška o zkratce.
Nejlepší aktivita hodiny: projděte s třídou všechny čtyři kombinace klíč × světlo. Napište je na tabuli jako tabulku a nechte děti předpovědět, která větev se chytne. Teprve pak to spusťte.
Kde se zaseknou:
if (maKlic == true). Funguje, ale je to zbytečné. Ukažte, že
if (maKlic) znamená totéž a čte se líp.if (maKlic && maSvetlo == false) místo !maSvetlo. Taky funguje,
jen je to delší. Vykřičník je hezčí.if (odpoved == "Ano"). Nefunguje, protože porovnání rozlišuje
velikost písmen. Proto je v zadání .ToLower().& místo &&. Zkompiluje se a většinou i funguje. Nezdržujte se
tím, jen řekněte „píšeme dvě".else if. Pak se nikdy nevypíše spolu s hlavní hláškou.
Musí to být samostatný if — dobrá příležitost si rozdíl zopakovat.Kdo je hotový dřív: ať přidá podmínku „bez klíče, ale s lanem se dá vlézt oknem" a vymyslí, kam v pořadí patří.
Otázka na závěr cvičení: „Kdy je a && b nepravda?"
Když neplatí aspoň jedna. „A kdy je a || b nepravda?" Až když neplatí obě.
Console.ReadLine() — jeden řádek na jedno čtení.Tvoje zadání:
Hrdina udeří, příšera se brání. Program spočítá, jak to dopadlo.
- Načti útok hrdiny z klávesnice
💡 Poradit
Otázku přesConsole.Write, načtení přesint.TryParse(Console.ReadLine(), out int utok);.
Když hráč zadá nesmysl, zůstane nula a program nespadne.- Načti obranu příšery a spočítej poškození
💡 Poradit
DruhéTryParses jiným názvemoutproměnné.
Poškození je prostý rozdíl:int poskozeni = utok - obrana;.- Vypiš zásah, když je poškození kladné
💡 Poradit
Stačí jedna podmínka:if (poskozeni > 0).
Do hlášky vlož hodnotu poškození přes interpolaci.- Dodělej větve pro remízu a pro odraženou ránu
💡 Poradit
Remíza jeelse if (poskozeni == 0)— pozor, dvě rovnítka.
Posledníelsechytne záporné poškození.- Přidej kritický zásah a přehled souboje
💡 Poradit
Kritický zásah pozná podmínkaposkozeni >= obrananeboposkozeni > 8— vyber si.
Přehled vypiš mezi dva řádkynew string('═', 40).
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–3 fungují a program pozná zásah |
| Rozšíření | Všechny tři výsledky včetně remízy |
| Výzva | Kritický zásah, bonus za štít a zbývající životy příšery |
Console.ReadLine() — jeden řádek na jedno čtení.Očekávaný výsledek: se vstupem 17 / 12 je obrana se štítem 15,
poškození 2, tedy obyčejný zásah a trollovi zbývá 38 životů.
Kde se zaseknou:
poskozeni = 0 místo poskozeni == 0. Nejtypičtější chyba dneška.
V if naštěstí neprojde (CS0029), tak si toho hned všimnou.> 0 před > 8. Pak se kritický zásah nikdy nevypíše.
Ať to zkusí a opraví — je to stejná lekce jako v cvičení 1.if (maStit) bez else. Někdo hledá, kam dát else. Nikam —
když štít není, obrana prostě zůstane, jak byla.Kdo je hotový dřív: ať přidá protiútok příšery (další dvě čísla ze stdin) a rozhodne, kdo kolo vyhrál.
Otázka na závěr cvičení: „Proč jsme poškození ořízli na nulu místo toho, abychom prostě nic neodečetli?" Protože pak stačí jeden vzorec a podmínka je jen jedna. Méně větví = méně chyb.
Console.ReadLine() — jeden řádek na jedno čtení.Tvoje zadání:
Hráč si vybere povolání a program mu k němu dopočítá všechno ostatní. Tady si vyzkoušíš oba druhy
switch.
- Zeptej se na povolání a odpověď ukliď
💡 Poradit
Text načti a hned uprav:string povolani = Console.ReadLine().Trim().ToLower();.
DíkyToLower()bude fungovat iMAGneboMag.- Napiš klasický
switch, který k povolání vypíše hlášku💡 Poradit
Každá větev začínácase "mag":a končíbreak;.
Na konci nezapomeň nadefault:pro neznámá povolání.- Přidej
switchvýraz, který vrátí počet životů💡 Poradit
Zápis jeint zivoty = povolani switch { ... };.
Uvnitř se píše"mag" => 70,a na konci_ => 50.- Stejným způsobem dopočítej zbraň a značku
💡 Poradit
Další dva výrazy vypadají stejně, jen vracejístringachar.
Ucharse hodnoty píšou v jednoduchých uvozovkách:'M'.- Vypiš kartu povolání v rámečku
💡 Poradit
Rámeček složíš znew string('═', 40)a sloupce srovnáš přesPadRight.
Značku dej do hranatých závorek:$"[{znacka}] {povolani}".
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–2 fungují a switch vypíše správnou hlášku |
| Rozšíření | switch výraz pro životy a zbraň |
| Výzva | Čtvrté povolání, dopočítaný útok a karta v rámečku |
Console.ReadLine() — jeden řádek na jedno čtení.Očekávaný výsledek: se vstupem mag vyjde hláška o holi,
životy 70, útok 22, značka M.
Kde se zaseknou:
break → CS0163. Stane se skoro každému a je to dobře,
protože hláška je srozumitelná._ ve switch výrazu → CS8509. Vysvětlete, že kompilátor
chce jistotu, že je pokrytá každá možnost.switch výrazem. Musí tam být, protože je to výraz,
ne blok. U klasického switch naopak středník nepatří. Tohle je hlavní
rozdíl, který si dneska mají zapamatovat.switch výrazu se odděluje čárkou,
ne středníkem. Poslední čárka být může i nemusí.case mag: bez uvozovek → chyba, protože mag není proměnná.Kdo je hotový dřív: ať sloučí dvě povolání do jedné větve
(case "mag": case "carodej":) nebo ať přidá switch výraz na popis
osobnosti hrdiny.
Otázka na závěr cvičení: „Kdy použiješ klasický switch a kdy výraz?"
Klasický, když se má něco udělat. Výraz, když se má něco vrátit.
Console.ReadLine() — jeden řádek na jedno čtení.Tvoje zadání:
Velké finále hodiny. Hráč si vytvoří postavu, vybere cestu a hra mu podle jeho rozhodnutí napíše, jak to dopadlo.
- Zeptej se na jméno a povolání a odpovědi ukliď
💡 Poradit
Jméno načti přesConsole.ReadLine().Trim(), povolání navíc přes.ToLower().
Díky tomu bude fungovat iMAG.- Dopočítej
switchvýrazem životy, značku a zbraň💡 Poradit
Zápis jeint zivoty = povolani switch { "mag" => 70, ..., _ => 50 };.
Tři výrazy pod sebou nahradí devětifů.- Zeptej se, kam hrdina půjde, a popiš cestu
💡 Poradit
Směr načti stejně jako povolání a popis vyrob dalšímswitchvýrazem.
Nezapomeň na větev_ => "slepá stěna".- Zeptej se na pochodně a rozhodni, jak výprava dopadne
💡 Poradit
Číslo načti přesTryParsea udělej z nějbool maSvetlo = pochodne > 0;.
První podmínka ať jeif (!maSvetlo)— bez světla je zbytek jedno.- Vypiš kartu hrdiny s pruhem života a koncem příběhu
💡 Poradit
Pruh spočítej jakozivoty * DILKU / MAX_ZIVOTY— nejdřív násob, pak děl.
Rámeček složíš z'╔','═'a'╗'nebo prostě znew string('═', SIRKA).
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–3 fungují a program zná povolání i směr |
| Rozšíření | Rozhodnutí podle světla a směru přes if/else if |
| Výzva | Pruh života, přehled stavu a vlastní čtvrtá cesta |
Console.ReadLine() — jeden řádek na jedno čtení.Očekávaný výsledek: se vstupem Elara / mag / vlevo / 2 vyjde karta
mága se 70 životy, pruh z dvanácti plných dílků, cíl „podzemní jezero"
a hláška o starém člunu.
Tohle je odměna za celou hodinu. Spojuje vstup (hodina 3),
typy (hodina 2), switch výrazy i if/else if. Nechte na konci pár dětí
promítnout jejich verzi — a hlavně ať si navzájem zadávají vstupy
a hádají, jak to dopadne.
Kde se zaseknou:
if (!maSvetlo) musí být první. Kdo to dá jinam,
pošle hrdinu do tmy a pak se diví._ ve switch výrazu → CS8509.znacka != '?'. Jednoduché uvozovky u char, dvojité
u string. Snadno se to plete a hláška je CS0029.PadRight a rámeček. Diakritika v některých terminálech rozhodí
šířku. Není to jejich chyba, jen vlastnost terminálu.Když zbývá čas: ať přidají čtvrtou cestu, vlastní povolání a podmínku, která pustí dál jen hrdinu s dostatkem životů. Příští hodinu z toho udělají opravdovou hru s cyklem.
Console.ReadLine() — jeden řádek na jedno čtení.Rozšiř svůj CsQuest o pravidla. Program má:
- zeptat se aspoň na tři věci a všechny odpovědi bezpečně zpracovat,
- obsahovat aspoň jeden
if/else if/elsese třemi a více větvemi,- obsahovat aspoň jednu složenou podmínku s
&&nebo||,- obsahovat aspoň jeden
switch(klasický nebo výraz — nebo oba),- a vypsat dva různé konce příběhu podle toho, co hráč zadal.
Vyzkoušej program aspoň třikrát tak, aby pokaždé skončil jinak. Do komentáře napiš, které vstupy k jakému konci vedou.
Nejcennější část úkolu je poslední odstavec. Dítě musí samo vymyslet vstupy, které dovedou program do konkrétní větve — a to je přesně dovednost testera.
Na začátku příští hodiny promítněte dva tři programy a nechte třídu hádat, jaké vstupy vedou ke kterému konci. Zabere to pět minut a zopakuje to celou hodinu.
Časté odevzdané chyby: špatné pořadí podmínek (nejvolnější nahoře),
= místo ==, zapomenutý break, chybějící _ ve switch výrazu.
Všechny jsou v tabulce Když se něco pokazí.
Kdo nemá doma .NET, může úkol udělat přímo tady v prohlížeči — vstupy napíše do políčka stdin a odevzdá snímek obrazovky.
Toto je jedna z možných variant, jak mohl úkol dopadnout. Tvoje řešení se může lišit a to je v pořádku.
Console.ReadLine() — jeden řádek na jedno čtení.Oficiální dokumentace je místo, kam se programátoři chodí podívat, když si chtějí něco ověřit nebo zjistit víc detailů. Je většinou v angličtině, ale to nevadí — zkus se orientovat podle názvu příkazu a podle ukázek kódu.
| Co jsme použili | Oficiální dokumentace | Co tam najdeš |
|---|---|---|
if, else |
Příkazy if a else |
základní tvar podmínky a vnořování |
switch |
Příkaz switch |
větve, break, default, sdílené case |
switch výraz |
Výraz switch |
moderní zápis s => a _ |
==, !=, <, > |
Porovnávací operátory | co přesně porovnávají a co vrací |
&&, ||, ! |
Logické operátory | pravdivostní tabulky a zkrácené vyhodnocení |
bool |
Typ bool |
jediné dvě možné hodnoty |
| Přednost operátorů | Pořadí vyhodnocení | proč se vyplatí psát závorky |
String.ToLower |
String.ToLower |
porovnávání textu bez ohledu na velikost písmen |
int.TryParse |
int.TryParse |
bezpečný převod z minulé hodiny |
CS8509 |
Chyba CS8509 |
proč switch výraz chce větev _ |
Stránku o switch výrazu mějte otevřenou při výkladu — je na ní vedle sebe
klasický switch i výraz, takže rozdíl je vidět na první pohled.
Ve VS Code najeďte myší na switch nebo na kód chyby v seznamu problémů
a stejná nápověda se ukáže přímo v editoru. Naučte je ten pohyb myší.
Pro rychlejší studenty, kteří dokončí cvičení dřív, nebo na posledních 10–15 minut.
| Cvičení | Odkaz | Proč se hodí |
|---|---|---|
| Programování — podmínky | umimeinformatiku.cz | Přesně dnešní téma, jen v jiném prostředí |
| Logika a výroky | umimeinformatiku.cz | „A zároveň" a „nebo" bez kódu — čistá logika |
| Programování — základy | umimeinformatiku.cz | Čtení kódu a předvídání, kterou větví program projde |
Cvičení na podmínky je zde obzvlášť vhodné, protože trénuje tu nejtěžší dovednost dnešní hodiny — udržet v hlavě, která větev se chytne jako první.
Nedávejte to celé třídě naráz. Použijte to jako záložní aktivitu pro tři až pět nejrychlejších dětí.
Dobrá alternativa pro rychlíky bez počítače: napište na tabuli
zivoty = 25 a pod to čtyři podmínky ve špatném pořadí
(< 70, < 30, <= 0, else). Nechte je určit, která se chytne,
a pak je přeskládat správně. Zabere to tři minuty a sedne to líp
než deset minut výkladu.