← Přehled všech hodin

Konzole a první program

Cíl hodiny: Děti odcházejí s vlastním programem v C#, který samy napsaly, a chápou, že program je seznam příkazů, které se provedou v pořadí shora dolů.
Jak stránku používat: vpravo nahoře je tlačítko Prezentace — schová všechno kromě jednoho bloku a přepíná se šipkami. U ukázek a cvičení je kód vlevo editovatelný: uprav ho a klikni na Spustit (nebo Ctrl+Enter). Program se přeloží a spustí přímo v prohlížeči a vpravo se objeví to, co vypsal do konzole. Nic se neinstaluje.
Kam celý kurz směřuje: Tahle hodina je první krok — text na obrazovce, na kterém bude všechno ostatní stavět.

1. Vysvětlení a souvislosti

Poznámky pro učiteleJak celou hodinu vést1. Vysvětlení a souvislosti

Tenhle blok je jen pro vás — dětem ho nepromítejte. Je to plán, podle kterého se řídíte.

Fáze Co se děje Čas
Rozjezd dotnet --version, dotnet new console, dotnet run 20 min
První výpis Změna textu → dotnet run → jiný výsledek 15 min
Výklad + ukázky Bloky 4–10, střídáte mluvení a promítání kódu 45 min
Cvičení Děti pracují samy, vy obcházíte 55 min
Závěr Kdo chce, ukáže svoji vizitku hrdiny 5 min
Hlavní pedagogický cíl

Dnešní hodina nemá naučit programovat. Má vytvořit zážitek „napsal jsem řádek a počítač ho udělal". Všechno ostatní (podmínky, cykly, třídy) staví na tomhle pocitu. Pokud dítě odchází a chce doma pokračovat, hodina se povedla, i kdyby nerozumělo slovu „proměnná".

Druhý, skrytý cíl: nebát se červené chybové hlášky. Kdo dnes uvidí CS1002 třikrát a pokaždé to opraví, ten příště chybu jen přečte a jde dál.

Tři věci, které dnes NEVYSVĚTLUJTE
  1. Typový systém. Používejte string a int, ale neřešte, co je typ. Říkejte „krabice na text" a „krabice na číslo". Typy přijdou 2. hodinu.
  2. Co je metoda a co vrací. Console.WriteLine je prostě „příkaz vypiš". Metody přijdou v 10. hodině.
  3. Proč tam nemusí být Main. Stačí věta: „Moderní C# to umí i bez toho." Kdo se zeptá, ukažte mu učitelský blok Technické pozadí na konci výkladu.

Jak pracovat se smíšenou úrovní. Každé cvičení má tři stupně: Minimum, Rozšíření, Výzva. Slabším řekněte, že stačí Minimum a je to úspěch. Rychlíkům dejte hned Výzvu a pak je posaďte jako pomocníky k někomu, kdo se trápí. Vysvětlování je nejlepší způsob, jak se něco naučit — a vám to ušetří půl hodiny běhání.

Poznámky pro učiteleRozjezd na hodině1. Vysvětlení a souvislosti

Tohle je úplně první věc, kterou uděláte. Podrobný návod i s obrázkovým popisem je na samostatné stránce Než začneme: C# ve Visual Studio Code — tady je jen rychlá verze na tabuli.

dotnet --version

Ověření, že .NET vůbec je. Musí vypsat něco jako 8.0.204. První číslo musí být 8 nebo vyšší.

Když příkaz vypíše command not found nebo 'dotnet' is not recognized, SDK chybí nebo je potřeba otevřít nový terminál. Nově nainstalované programy se do už otevřeného okna nepropíšou.

dotnet new console -o CsQuest
cd CsQuest

Vyrobení projektu. Vznikne složka CsQuest se souborem Program.cs. Zdůrazněte, že tohle se dělá jednou za projekt, ne pokaždé.

Děti budou chtít projekt pojmenovat po sobě. Nechte je — jen ať si pamatují, do které složky se pak mají přepnout příkazem cd.

dotnet run

Jediný příkaz, kterým se program spouští. Přeloží a spustí. Poprvé to trvá pár sekund.

Zdůrazněte: dotnet Program.cs nefunguje. A hlavně — příkaz musí běžet uvnitř složky projektu, jinak vypíše MSB1003.

Zálohy, které mějte připravené předem
  • Tato stránka. Kód v ukázkách i ve cvičeních jde spustit rovnou tady v prohlížeči tlačítkem Spustit — funguje to i bez nainstalovaného .NETu. Tohle je nejlepší záchrana, když instalace nevyjde.
  • USB s offline instalátory .NET SDK a VS Code, když je školní síť pomalá.
  • Dvojice. Kdo má běžící .NET, posadí se k tomu, komu to nejde.
Poznámky pro učiteleRytmus práce: napiš → ulož → spusť1. Vysvětlení a souvislosti

Tohle je největší motivační trik celé hodiny. Postup si předem vyzkoušejte, ať před dětmi neváháte.

VS Code                        Terminál
┌──────────────────┐          ┌──────────────────┐
│ Program.cs       │          │ > dotnet run     │
│                  │  Ctrl+S  │                  │
│ Console.WriteLine│─────────►│ Ahoj, tady       │
│   ("Ahoj...");   │          │   CsQuest!       │
└──────────────────┘          └──────────────────┘

Kód a výsledek musí být vidět zároveň. Terminál ve VS Code se otevírá dole (Ctrl+`), takže to jde samo — jen ho zvětšete tažením za horní hranu.

Naučte děti rutinu: napiš → Ctrl+S → klikni do terminálu → šipka nahoru → Enter. Šipka nahoru vytáhne poslední příkaz, takže dotnet run nepíšou pořád dokola.

Dokud dítě přepíná mezi okny naslepo, nevidí souvislost mezi kódem a výsledkem. Obejděte třídu a zkontrolujte, že rutinu má opravdu každý.

Jak to předvést dramaticky.

Napište na projektoru tenhle jediný řádek a spusťte. Pak před zraky dětí změňte text na "🔥 AHOJ SVĚTE 🔥" a spusťte znovu.

Tady většinou nastane ten moment, kdy si děti uvědomí, že mají nad obrazovkou moc. Nechte je pak deset vteřin jenom přepisovat ten text. Vyplatí se to.

Tlačítko Spustit vlevo funguje i na téhle stránce — vyzkoušejte si to hned teď.

Klikni vlevo na Spustit a objeví se tu výstup programu.
Na co se připravit

Děti budou zapomínat středník. Počítejte s tím, že hlášku CS1002: ; expected uvidíte dnes padesátkrát. Neopravujte to za ně — ukažte jim číslo řádku v hlášce a nechte je najít chybu samy. Potřetí už to zvládnou bez vás.

Velká a malá písmena. console.writeline není Console.WriteLine. C# je na tohle přísný a hláška CS0103 zní děsivě. Napište na tabuli velkými písmeny: C# ROZLIŠUJE VELKÁ A MALÁ PÍSMENA.

Blok 1Co je C#1. Vysvětlení a souvislosti

Zapamatuj si:

C# (čti „sí šarp") je programovací jazyk. Píšeš v něm příkazy pro počítač — a počítač je udělá přesně v tom pořadí, v jakém je napíšeš. Nic si nedomýšlí, nic nepřeskočí. V C# jsou napsané weby, firemní systémy i hry v Unity.

Jednoduchá představa:

Program je recept. Každý řádek je jeden krok receptu. Počítač je kuchař, který umí jenom číst a poslouchat — nikdy nevaří od oka a nikdy nepřeskočí krok. Když v receptu chybí tečka, kuchař se zastaví a zeptá se.

Klikni vlevo na Spustit a podívej se na výstup. Pak prohoď dva řádky a spusť znovu.

Klikni vlevo na Spustit a objeví se tu výstup programu.
Program.cs  ──►  překladač  ──►  běžící program
(tvůj text)      (dotnet)        (text v konzoli)

Proč to má dva kroky. Tvůj text není program — je to jen text. Než se dá spustit, musí ho překladač přeložit do řeči, které rozumí počítač.

To je rozdíl proti Pythonu nebo JavaScriptu: C# se vždycky nejdřív přeloží a až potom spustí. Právě proto ti překladač umí říct o chybě dřív, než program vůbec poběží.

Příkaz dotnet run dělá obojí naráz: přelož a spusť.

Blok 2Příkaz, středník a pořadí řádků1. Vysvětlení a souvislosti

Tři věci najednou:

  1. Console.WriteLine(...) vypíše text a odřádkuje.
  2. Console.Write(...) vypíše text a zůstane na místě — další výpis naváže hned za ním.
  3. Console.WriteLine() bez ničeho v závorce vypíše prázdný řádek. Hodí se na mezery mezi částmi.

Středník je tečka na konci věty. Každý příkaz jím končí. Když chybí, překladač si myslí, že věta pokračuje, a nahlásí CS1002: ; expected.

Pořadí se dodržuje přesně. Co je v kódu výš, vypíše se dřív. Žádná magie — prohoď řádky a spusť znovu.

Klikni vlevo na Spustit a objeví se tu výstup programu.
Jak číst zápis Console.WriteLine
  • Console = konzole, tedy to černé okno s textem.
  • . = „u ní", „její".
  • WriteLine = „napiš řádek".
  • ( ) = závorky, do kterých dáváš, co se má napsat.

Celé to čti jako větu: „Konzole, napiš řádek s tímhle textem."

Blok 3Text v uvozovkách a speciální znaky1. Vysvětlení a souvislosti

Text musí být v uvozovkách. Tomu, co je mezi nimi, se říká řetězec (anglicky string). Bez uvozovek by si překladač myslel, že jde o jméno nějakého příkazu, a zahlásil CS0103.

Zpětné lomítko \ je kouzelná značka. Říká „další znak ber jinak":

Zápis Co udělá
\n odřádkuje uprostřed textu
\t udělá tabulátor (odsazení)
\" napíše uvozovku, aniž by text skončil
\\ napíše jedno zpětné lomítko

Emoji a české znaky můžeš psát normálně — C# umí celý Unicode.

Klikni vlevo na Spustit a objeví se tu výstup programu.
Nejčastější chyba dneška

Když napíšeš Console.WriteLine("Řekl "ahoj" a šel");, řetězec skončí u druhé uvozovky a zbytek překladač nepochopí. Buď použij \", nebo dovnitř dej jednoduché uvozovky: "Řekl 'ahoj' a šel".

Blok 4Proměnná: pojmenovaná krabice1. Vysvětlení a souvislosti

Proměnná je krabice se jménem, do které si odložíš hodnotu. Zápis se čte zprava doleva: „vezmi "Arkon" a ulož to do krabice jmeno."

  • string jmeno = "Arkon"; — krabice na text, proto string.
  • int uroven = 3; — krabice na celé číslo, proto int. Čísla se nepíšou do uvozovek! "3" je text, 3 je číslo.
  • jmeno = "Elara"; — bez string na začátku, protože krabice už existuje. Jen do ní dáváš něco jiného. Proto pro-měnná: její obsah se dá měnit.

Jména si vymýšlíš ty, ale bez mezer a bez háčků: jmeno, ne jméno hrdiny. Zvyk v C# je psát je takhleMalymVelkym (tzv. camelCase).

Klikni vlevo na Spustit a objeví se tu výstup programu.
Proč to má smysl

Bez proměnné bys jméno hrdiny psal do programu desetkrát. S proměnnou ho napíšeš jednou a na deseti místech použiješ její jméno. Když se hrdina přejmenuje, měníš jedno místo. Tohle je důvod, proč proměnné existují.

Blok 5Interpolace: text a proměnná dohromady1. Vysvětlení a souvislosti

Dva způsoby, jak spojit text s proměnnou:

  1. Sčítání + — funguje, ale při třech proměnných se to stane nečitelnou změtí uvozovek a plusů.
  2. Interpolace $"..." — před uvozovky napíšeš dolar a proměnnou pak píšeš rovnou do textu ve složených závorkách. Tohle používej.

Dolar říká překladači: „v tomhle textu hledej složené závorky a nahraď je hodnotami."

Uvnitř {} může být i výpočet: {uroven + 2} vypíše číslo o dvě větší.

Nezapomeň na dolar. Bez něj se vypíše doslova {jmeno} i se závorkami — a je to nejčastější „proč mi to nefunguje" dnešní hodiny.

Klikni vlevo na Spustit a objeví se tu výstup programu.
Blok 6Počítání s čísly1. Vysvětlení a souvislosti

Počítá se úplně normálně: + - * (krát) / (děleno).

Dvě věci, které překvapí:

  • % je zbytek po dělení. 12 % 5 je 2. Bude se hodit u kostky, střídání hráčů a náhody.
  • Celá čísla se dělí celočíselně! 12 / 5 je 2, ne 2,4. Zbytek se zahodí. Když chceš desetinný výsledek, potřebuješ jiný typ krabice (double) — a to je téma příští hodiny.

Řádek zlato = zlato - cena; vypadá matematicky nesmyslně, ale čti ho jako příkaz: „spočítej zlato - cena a výsledek ulož zpátky do zlato." Rovnítko v programu není rovnost, ale ukládání.

Klikni vlevo na Spustit a objeví se tu výstup programu.
Blok 7Program, který se ptá1. Vysvětlení a souvislosti
Console.Write("Jak se jmenuje tvůj hrdina? ");
string jmeno = Console.ReadLine();
Console.WriteLine($"Vítej, {jmeno}!");

Console.ReadLine() počká, až uživatel něco napíše a zmáčkne Enter, a ten text ti vrátí. Výsledek si musíš uložit do proměnné, jinak se ztratí.

Všimni si Console.Write (bez Line) v otázce — díky tomu zůstane kurzor na stejném řádku hned za otazníkem. Vypadá to jako opravdová konverzace.

Pozor: ReadLine vrací vždycky text. I když uživatel napíše 42, dostaneš text "42", se kterým se nedá počítat. Na převod slouží int.Parse(...) — viz další ukázka.

Dole v dílně uvidíš políčko Standardní vstup (stdin). Tady v prohlížeči totiž není klávesnice konzole, takže odpovědi napíšeš dopředu: každý řádek = jedna odpověď na jedno Console.ReadLine().

demo/demo_ptame_se.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Program čte z konzole. Co sem napíšeš, to „odpoví" na každé Console.ReadLine() — jeden řádek na jedno čtení.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.
Co dělá int.Parse

int.Parse("12") znamená „vezmi text a udělej z něj číslo". Bez toho by sila * 2 skončilo chybou, protože text se nedá násobit.

Když uživatel napíše něco, co číslo není (třeba dvanáct), program spadne na FormatException. To je v pořádku — dnes to nebudeme ošetřovat, jen si toho všimni, až se to stane.

Blok 8Kreslíme textem: rámečky a zarovnání1. Vysvětlení a souvislosti

V konzoli nemáš obrázky — kreslí se znaky. A to jde překvapivě dobře.

  • new string('=', 30) vyrobí text z třiceti rovnítek. Čti: „nový text ze znaku =, třicetkrát". Znak je v jednoduchých uvozovkách, text ve dvojitých.
  • jmeno.PadRight(26) doplní text mezerami do délky 26 znaků, takže svislítka jsou pod sebou. Bez toho by se rámeček rozjel.

Zkus si místo = dát , nebo *. A zkus změnit 30 na 50.

Tohle je první moment, kdy z textu vznikne něco, co vypadá jako hra. Děti tady začnou samy vymýšlet vlastní rámečky — nechte je.

Klikni vlevo na Spustit a objeví se tu výstup programu.
Poznámky pro učiteleTechnické pozadí — jen pro vás1. Vysvětlení a souvislosti

Věci, které dětem dnes neříkejte, ale vy je vědět potřebujete.

Proč tam není Main. Od C# 9 / .NET 5 existují top-level statements: překladač kolem vašeho kódu Main dogeneruje sám. Starší tutoriály a hlavně starší školní materiály ukazují plnou podobu:

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Ahoj");
    }
}

Obojí je platné C# a dělá totéž. My držíme celý rok krátký zápis, protože u dvanáctiletých je každý řádek „takhle se to prostě musí napsat" zbytečná zátěž. Třídy přijdou v 16. hodině a tam se k plné podobě vrátíme.

Proč není potřeba using System;. Nové projekty mají zapnuté implicit usings (v .csproj je <ImplicitUsings>enable</ImplicitUsings>), takže System, System.Linq, System.Collections.Generic a další jsou k dispozici automaticky. Stejné nastavení má i běhové prostředí těchto stránek. Když dítě using System; napíše, nic se nestane — je to povolené, jen nadbytečné.

Co běží v prohlížeči. Tlačítko Spustit na téhle stránce nikam neposílá kód. Uvnitř prohlížeče běží skutečný překladač Roslyn (přeložený do WebAssembly), který kód přeloží a spustí a vrátí text, který program vypsal do konzole. Rozdíly proti dotnet run na počítači:

Funguje Nefunguje
texty, čísla, podmínky, cykly práce se soubory (File, Directory)
List, Dictionary, LINQ síť (HttpClient)
třídy, metody, výjimky Thread.Sleep, Task.Delay
Console.ReadLine() přes políčko stdin Console.ForegroundColor (barvy)

U kódu, který sáhne na zakázanou věc, se tlačítko Spustit vůbec nenabídne — generátor stránky to pozná podle textu kódu a zobrazí jen kód s vysvětlením.

Console.ReadLine() může vrátit null. Když vstup dojde, vrací null a ve VS Code kvůli tomu svítí žlutá vlnovka (CS8600). Je to varování, ne chyba, program se přeloží a poběží. Dětem to nevysvětlujte; kdo se zeptá, řekněte „to znamená co když tam uživatel nic nenapíše — vyřešíme to později". Správné ošetření (?? "", TryParse) přijde v 7. hodině u podmínek.

Kultura a desetinná čárka. 12.5.ToString() vypíše na českém systému 12,5. Dnes to nevadí, ale až se objeví desetinná čísla, počítejte s dotazem „proč má učitel čárku a já tečku".

2. Ukázky pro projekci

Blok 9Ukázka 1 — Úplně první výpis2. Ukázky pro projekci
Studenti zkuste změnit
  • Změň text uvnitř uvozovek na svůj — jak se jmenuje tvoje hra?
  • Přidej čtvrtý Console.WriteLine s dalším řádkem.
  • Prohoď pořadí dvou řádků a spusť znovu. Co se stalo?
  • Smaž jeden středník a spusť. Přečti si chybovou hlášku — na kterém řádku chyba je?
demo/demo1_prvni_vypis.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.

Co si z toho odnést: tři příkazy, tři řádky výstupu, přesně v tom pořadí, v jakém jsou napsané. Nic víc v tom není.

Blok 10Ukázka 2 — Odřádkování a uvozovky2. Ukázky pro projekci
Studenti zkuste změnit
  • Přidej do některého textu \n uprostřed věty.
  • Zkus dát \t mezi dvě slova — o kolik se odsadí?
  • Nech hrdinu říct něco vlastního pomocí \"uvozovek\".
  • Co se stane, když napíšeš \ a za ním písmeno, které nic neznamená (třeba \q)?
demo/demo2_uvozovky.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.

Co si z toho odnést: \n je odřádkování, \t je tabulátor, \" je uvozovka uvnitř textu. Zpětné lomítko není písmeno, ale pokyn.

Blok 11Ukázka 3 — Proměnné a interpolace2. Ukázky pro projekci
Studenti zkuste změnit
  • Přepiš jméno, povolání i čísla na svého hrdinu.
  • Přidej proměnnou int zlato = 50; a vypiš ji dalším řádkem.
  • Zkus v posledním řádku spočítat {sila + obrana}.
  • Smaž dolar před uvozovkami u jednoho řádku a spusť. Co se vypíše?
demo/demo3_promenne.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.

Co si z toho odnést: hodnoty jsou nahoře na jednom místě, výpis dole. Když změníš jméno nahoře, změní se všude dole. To je celé kouzlo proměnných.

Blok 12Ukázka 4 — Program, který se ptá2. Ukázky pro projekci
Studenti zkuste změnit
  • Změň otázky — ptej se třeba na oblíbenou zbraň.
  • Přidej třetí otázku a třetí proměnnou.
  • V políčku stdin napiš jiné odpovědi a spusť znovu.
  • Zkus do políčka stdin napsat u síly slovo místo čísla. Co program udělá?
demo/demo4_ptame_se.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Program čte z konzole. Co sem napíšeš, to „odpoví" na každé Console.ReadLine() — jeden řádek na jedno čtení.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.

Co si z toho odnést: Console.ReadLine() přečte řádek, int.Parse(...) z něj udělá číslo. V prohlížeči odpovědi předepíšeš do políčka stdin — na počítači je budeš normálně psát na klávesnici.

Blok 13Ukázka 5 — Vizitka hrdiny v rámečku2. Ukázky pro projekci
Studenti zkuste změnit
  • Změň šířku rámečku z 32 na 50. Nezapomeň i na PadRight!
  • Vyměň znak za *, # nebo .
  • Přidej do vizitky další řádek (zlato, oblíbená zbraň, domovské město).
  • Spočítej v posledním řádku celkovou sílu jako {sila + obrana + uroven}.
demo/demo5_vizitka.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.

Co si z toho odnést: PadRight drží svislítka pod sebou. U čísla se musí nejdřív říct .ToString(), protože zarovnávat jde jen text.

Blok 14Když se něco pokazí2. Ukázky pro projekci
Program.cs(3,42): error CS1002: ; expected

Chybová hláška není nadávka, je to adresa. Čti ji zleva:

  • Program.cs — ve kterém souboru,
  • (3,42)řádek 3, sloupec 42,
  • CS1002 — kód chyby (dá se vygooglit),
  • ; expected — co překladač čekal a nenašel.

Jdi na řádek 3 a podívej se na jeho konec. Chybí středník.

Pravidlo pro dnešek: vždycky oprav první chybu shora. Jedna chyba jich často vyvolá dalších pět. Po opravě té první zmizí i ostatní.

Hláška Co to znamená Jak to opravit
CS1002: ; expected chybí středník dopiš ; na konec řádku
CS1010: Newline in constant neuzavřená uvozovka doplň druhou "
CS0103: The name ... does not exist překlep nebo malé písmeno Console.WriteLine, ne console.writeline
CS0029 / CS1503 míchá se text a číslo u čísla použij int.Parse(...)
CS0165: Use of unassigned variable proměnná nemá hodnotu přiřaď jí něco při vytvoření
MSB1003 špatná složka v terminálu cd do složky projektu
vypíše se {jmeno} chybí dolar napiš $"..."

3. Cvičení

Jak cvičení používat: zadání promítněte. Části Pro učitele a Řešení jsou schované — rozbalí se až kliknutím, takže je můžete mít otevřené a děti je neuvidí, dokud nechcete. Kód ve cvičení i v řešení jde spustit a upravovat přímo tady v prohlížeči.
Blok 15Cvičení 1 — Vizitka hrdiny (15 min)3. Cvičení

Tvoje zadání:

Napiš program, který vypíše vizitku tvého hrdiny. Musí obsahovat:

  1. Nadpis === VIZITKA HRDINY === na prvním řádku
    💡 Poradit
    Použij jeden Console.WriteLine a celý nadpis dej do uvozovek.
    Například Console.WriteLine("=== VIZITKA HRDINY ===");. Nezapomeň na středník na konci.
  2. Proměnné jmeno a povolani s tvými hodnotami
    💡 Poradit
    Text se ukládá do krabice typu string. Napiš typ, jméno krabice, rovnítko a hodnotu v uvozovkách.
    Například string jmeno = "Arkon"; a pod to string povolani = "Kouzelník";.
  3. Výpis obou proměnných pomocí interpolace $"..."
    💡 Poradit
    Před uvozovky napiš dolar a proměnnou vlož do složených závorek.
    Například Console.WriteLine($"Jméno: {jmeno}");. Bez dolaru se vypíše doslova {jmeno}.
  4. Čísla uroven, sila a zivoty a jejich výpis
    💡 Poradit
    Celá čísla se ukládají do krabice int a nepíšou se do uvozovek.
    Například int uroven = 3;. Vypíšeš je stejně jako text: Console.WriteLine($"Úroveň: {uroven}");.
  5. Poslední řádek s výpočtem bojové hodnoty přímo v interpolaci
    💡 Poradit
    Do složených závorek smíš napsat i počítání, ne jen jméno proměnné.
    Například Console.WriteLine($"Bojová hodnota: {sila * 2 + uroven}");.
Úroveň Co má zvládnout
Minimum Body 1–3 fungují
Rozšíření Přidat prázdné řádky Console.WriteLine(); mezi sekce a další proměnnou (zlato)
Výzva Vypsat i „životy po zásahu" jako {zivoty - 25} a přidat emoji do nadpisu
cviceni/cviceni1_vizitka.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.
Pro učitele — na co si dát pozor

Očekávaný výsledek: sedm až devět řádků textu s nadpisem, údaji o hrdinovi a spočítanou bojovou hodnotou.

Kde se zaseknou:

  • Chybějící středník. Nejčastější chyba dneška. Naučte je číst číslo řádku z hlášky CS1002 místo hledání očima.
  • Číslo v uvozovkách. int sila = "12"; nejde přeložit (CS0029). Řekněte: „uvozovky znamenají text, a text se nedá násobit".
  • Chybějící dolar. Vypíše se doslova {jmeno}. Nechte je chvíli hledat samy — když to najdou, zapamatují si to nadosmrti.
  • Velké písmeno. console.WriteLineCS0103. Na tabuli velkými písmeny: C# ROZLIŠUJE VELKÁ A MALÁ PÍSMENA.
  • Háčky ve jménech proměnných. string jméno sice C# povolí, ale poraďte psát bez diakritiky — jinak se jim překlepy hledají špatně.

Kdo je hotový dřív: ať přidá proměnnou int zlato a řádek Console.WriteLine($"Po nákupu lektvaru: {zlato - 30} zlaťáků");.

Otázka na závěr cvičení: „Kolik míst musíš změnit, když se hrdina přejmenuje?" Odpověď je jedno — a to je celý smysl proměnných.

Řešení 1 — jedna z možných variant
reseni/reseni1_vizitka.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.
Blok 16Cvičení 2 — Rámeček kolem vizitky (20 min)3. Cvičení

Tvoje zadání:

Vezmi vizitku z prvního cvičení a dej ji do rámečku ze znaků.

  1. Horní a dolní čára z 34 znaků
    💡 Poradit
    Nemusíš psát 34 znaků ručně. new string('═', 34) vyrobí text z 34 stejných znaků.
    Pozor: znak je v jednoduchých uvozovkách, protože je to jeden jediný znak.
    Celý řádek: Console.WriteLine(new string('═', 34));
  2. Uprostřed nadpis CSQUEST
    💡 Poradit
    Stačí obyčejný Console.WriteLine s mezerami na začátku textu.
    Například Console.WriteLine(" CSQUEST");. Mezery uvnitř uvozovek se počítají.
  3. Každý údaj na řádku se svislítkem na začátku i na konci
    💡 Poradit
    Svislítko dej dovnitř textu v interpolaci.
    Například Console.WriteLine($"║ Jméno: {jmeno} ║");. Zatím se to nebude zarovnávat — to je další bod.
  4. Svislítka srovnaná pod sebou pomocí PadRight
    💡 Poradit
    jmeno.PadRight(20) doplní text mezerami na délku 20 znaků, takže všechny řádky budou stejně dlouhé.
    Například Console.WriteLine($"║ Jméno: {jmeno.PadRight(20)} ║");.
    U čísla musíš nejdřív říct .ToString(): {uroven.ToString().PadRight(20)}.
  5. Pod rámečkem prázdný řádek a hláška „Hrdina připraven."
    💡 Poradit
    Prázdný řádek vyrobíš Console.WriteLine(); úplně bez textu v závorce.
    Pak přidej ještě jeden normální výpis s hláškou.
Úroveň Co má zvládnout
Minimum Body 1–3 fungují (rámeček je, zarovnání ještě ne)
Rozšíření Body 4–5, svislítka přesně pod sebou
Výzva Vyrobit rámeček s rohy ╔ ╗ ╚ ╝ a vodorovnou dělicí čárou uvnitř
cviceni/cviceni2_ramecek.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.
Pro učitele — na co si dát pozor

Očekávaný výsledek: rámeček, ve kterém jsou svislítka přesně pod sebou. Tohle je hodina, kdy si děti poprvé řeknou „to vypadá jako opravdová hra".

Kde se zaseknou:

  • Jednoduché vs. dvojité uvozovky. new string("═", 34) nejde (CS1503). Znak = jednoduché uvozovky, text = dvojité. Napište to na tabuli.
  • PadRight na čísle. uroven.PadRight(19) nejde, protože číslo není text. Nejdřív .ToString(), pak PadRight. Tohle je dnes nejtěžší moment hodiny — klidně jim to řešení rovnou ukažte a jděte dál.
  • Rozjeté svislítko. Když má někdo delší jméno než 19 znaků, rámeček se rozjede. Je to správné chování, ne chyba. Ať zvětší číslo v PadRight i v čáře.
  • Znak na klávesnici není. Nechte je zkopírovat ze zadání nebo použít obyčejné =. Nezdržujte se s tím.

Kdo je hotový dřív: rohy ╔ ╗ ╚ ╝ a ╠ ╣ uprostřed. Vyžaduje to trpělivost s počítáním znaků a je to skvělá „tichá" práce.

Otázka na závěr cvičení: „Proč nepíšeme 34 rovnítek ručně?" Odpověď: aby stačilo změnit jedno číslo, když chceme rámeček širší.

Řešení 2 — jedna z možných variant
reseni/reseni2_ramecek.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.
Blok 17Cvičení 3 — Statistiky a počítání (20 min)3. Cvičení

Tvoje zadání:

Hrdina jde do obchodu a pak do boje. Spočítej, jak dopadne.

  1. Proměnné zlato = 150, cenaMece = 90, sila = 12, zivoty = 100
    💡 Poradit
    Čtyři krabice typu int pod sebou, každá na svém řádku.
    Například int zlato = 150;. Žádné uvozovky — jsou to čísla.
  2. Vypiš, kolik zlata zbude po nákupu meče
    💡 Poradit
    Odečti cenu od zlata rovnou v interpolaci.
    Například Console.WriteLine($"Zbude {zlato - cenaMece} zlaťáků.");.
  3. Zlato opravdu změň — po nákupu ho musí být míň i v proměnné
    💡 Poradit
    Napiš zlato = zlato - cenaMece;. Čti to jako příkaz: „spočítej rozdíl a ulož ho zpátky do zlata."
    Zkráceně jde napsat i zlato -= cenaMece;.
  4. Meč přidá 5 k síle — spočítej nový útok jako sila * 2
    💡 Poradit
    Nejdřív zvyš sílu: sila = sila + 5; (nebo sila += 5;).
    Pak vypiš útok: Console.WriteLine($"Útok: {sila * 2}");.
  5. Drak ubere 35 životů — vypiš, kolik zbude, a kolik je to celých desítek
    💡 Poradit
    Odečti životy stejně jako zlato. Celé desítky získáš celočíselným dělením: {zivoty / 10}.
    Zbytek po dělení dá {zivoty % 10} — vyzkoušej si oba.
Úroveň Co má zvládnout
Minimum Body 1–3 fungují
Rozšíření Body 4–5 a mezi sekcemi prázdné řádky
Výzva Přidat druhý nákup (lektvar za 25) a ověřit, že zlato klesá postupně
cviceni/cviceni3_statistiky.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.
Pro učitele — na co si dát pozor

Očekávaný výsledek: program, ve kterém se hodnoty proměnných postupně mění a každá změna je vidět ve výpisu.

Kde se zaseknou:

  • zlato = zlato - cenaMece; jim přijde jako nesmysl. V matematice to neplatí. Vysvětlete přes krabici: „vyndej, co je v krabici, odečti a dej zpátky." Tohle je nejdůležitější myšlenka celého cvičení.
  • Pořadí řádků. Když zlato zmenší před výpisem, vypíše se jiné číslo, než čekají. Je to skvělá příležitost ukázat, že na pořadí opravdu záleží.
  • Celočíselné dělení. 100 / 3 je 33, ne 33,33. Děti to považují za chybu. Řekněte: „celá čísla neumí desetinná místa, to bude příště".
  • % je pro ně nové. Ukažte na hodinách: 75 % 60 je 15 minut.

Kdo je hotový dřív: ať přidá lektvar za 25 zlaťáků, který vrátí 20 životů, a vypíše konečný stav hrdiny.

Otázka na závěr cvičení: „Co bude v proměnné zlato na konci programu a proč to není 150?"

Řešení 3 — jedna z možných variant
reseni/reseni3_statistiky.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.
Blok 18Cvičení 4 — Program, který se ptá (20 min)3. Cvičení

Tvoje zadání:

Napiš program, který si hrdinu nechá vytvořit uživatelem.

  1. Zeptej se na jméno pomocí Console.Write a Console.ReadLine()
    💡 Poradit
    Nejdřív otázka bez odřádkování, pak čtení odpovědi do proměnné.
    Console.Write("Jméno hrdiny: ");
    string jmeno = Console.ReadLine();
  2. Zeptej se na povolání a obojí vypiš
    💡 Poradit
    Úplně stejně jako u jména — další Console.Write a další proměnná.
    Pak vypiš obojí jednou interpolací: Console.WriteLine($"{jmeno} je {povolani}.");
  3. Zeptej se na sílu a převeď odpověď na číslo
    💡 Poradit
    Console.ReadLine() vrací text, i když napíšeš číslice. Na číslo ho převedeš pomocí int.Parse(...).
    int sila = int.Parse(Console.ReadLine());
  4. Spočítej a vypiš útok jako sila * 2
    💡 Poradit
    Když je síla opravdu číslo, můžeš s ní počítat rovnou ve složených závorkách.
    Console.WriteLine($"Útok: {sila * 2}");
    Kdyby síla zůstala textem, program by tady spadl.
  5. Výsledek vypiš jako hotovou vizitku s čárou nahoře i dole
    💡 Poradit
    Před výpis a za výpis dej Console.WriteLine(new string('-', 30));.
    Uprostřed použij PadRight, ať to drží tvar.

Pozor: odpovědi se v prohlížeči píšou dopředu do políčka Standardní vstup (stdin) pod kódem — každý řádek je jedna odpověď.

Úroveň Co má zvládnout
Minimum Body 1–2 fungují (ptá se na jméno a povolání)
Rozšíření Body 3–4 s int.Parse a výpočtem
Výzva Zeptat se i na obranu a spočítat bojovou hodnotu sila * 2 + obrana
cviceni/cviceni4_ptame_se.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Program čte z konzole. Co sem napíšeš, to „odpoví" na každé Console.ReadLine() — jeden řádek na jedno čtení.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.
Pro učitele — na co si dát pozor

Očekávaný výsledek: program, který se zeptá na tři věci a vypíše z nich vizitku. Na počítači je to první opravdová interakce — děti to budou zkoušet dokola.

Kde se zaseknou:

  • Zapomenou si odpověď uložit. Napíšou Console.ReadLine(); bez string jmeno = a pak se diví, že jméno „zmizelo". Přirovnejte to k tomu, že něco chytnete a hned pustíte na zem.
  • Počítání s textem. Bez int.Parse skončí sila * 2 chybou CS0019. Věta na zapamatování: „z klávesnice chodí vždycky text."
  • V prohlížeči nic nenapíšou. Na téhle stránce se odpovědi předepisují do políčka stdin. Zdůrazněte: kolik otázek, tolik řádků. Když je řádků míň, int.Parse(null) skončí chybou.
  • Ve VS Code naopak. Tam se dotnet run opravdu zastaví a čeká na Enter. Někdo si bude myslet, že se program zasekl.
  • Žlutá vlnovka CS8600 u string jmeno = Console.ReadLine(); je jen varování. Ignorujte ho, program funguje.

Kdo je hotový dřív: ať se zeptá i na obranu a vypíše bojovou hodnotu. Nebo ať se zeptá na počet lektvarů a spočítá, kolik životů celkem doplní.

Otázka na závěr cvičení: „Proč musí být u síly int.Parse a u jména ne?"

Řešení 4 — jedna z možných variant
reseni/reseni4_ptame_se.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Program čte z konzole. Co sem napíšeš, to „odpoví" na každé Console.ReadLine() — jeden řádek na jedno čtení.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.
Blok 19Cvičení 5 — Úvodní obrazovka CsQuestu (25 min)3. Cvičení

Tvoje zadání:

Spoj všechno dohromady a vytvoř úvodní obrazovku své hry.

  1. Velký nadpis hry ze znaků — aspoň tři řádky
    💡 Poradit
    Čára, název, čára. Na čáry použij new string('═', 44), na název obyčejný Console.WriteLine s mezerami na začátku.
  2. Krátký popis světa (2–3 věty)
    💡 Poradit
    Každá věta jeden Console.WriteLine. Mezi odstavce dej prázdný řádek pomocí Console.WriteLine();.
    Uvnitř věty můžeš použít \n, když chceš zalomit ručně.
  3. Vizitka hrdiny z proměnných, zarovnaná
    💡 Poradit
    Vezmi to, co jsi dělal ve cvičeních 1 a 2: proměnné nahoře, výpis s PadRight dole.
    U čísel nezapomeň .ToString() před PadRight.
  4. Seznam tří míst, kam se dá jít, očíslovaný
    💡 Poradit
    Tři výpisy pod sebou, každý začíná číslem.
    Například Console.WriteLine(" [1] Temný les");. Hranaté závorky vypadají v konzoli dobře.
  5. Na konci se zeptej „Kam se vydáš?" a odpověď zopakuj
    💡 Poradit
    Console.Write("Kam se vydáš? "); a pak string volba = Console.ReadLine();.
    Odpověď vypiš zpátky: Console.WriteLine($"Vydáváš se do oblasti {volba}. Hodně štěstí!");
    Že program zatím nikam nejde, je v pořádku — rozhodování přijde v 7. hodině.
Úroveň Co má zvládnout
Minimum Body 1–3 (nadpis, popis, vizitka)
Rozšíření Body 4–5 se seznamem míst a otázkou
Výzva Celá obrazovka v jednom rámečku, šířka řízená proměnnou sirka
cviceni/cviceni5_uvodni_obrazovka.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Program čte z konzole. Co sem napíšeš, to „odpoví" na každé Console.ReadLine() — jeden řádek na jedno čtení.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.
Pro učitele — na co si dát pozor

Očekávaný výsledek: obrazovka, která vypadá jako úvod skutečné textové hry. Tohle je výstup hodiny — nechte děti obrazovky navzájem ukázat.

Kde se zaseknou:

  • Kód je dlouhý a ztrácejí se v něm. Poraďte jim psát ho po částech a po každé části spustit. Kdo napíše 30 řádků najednou, hledá chybu deset minut.
  • Rozjeté mezery v nadpisu. Nadpis se nezarovná sám. Ať zkouší přidávat a ubírat mezery, dokud to nevypadá dobře. Je to legitimní část práce.
  • Chtějí barvy. Console.ForegroundColor tady v prohlížeči nefunguje a ve VS Code to zbytečně komplikuje. Řekněte, že barvy si dáme později.
  • Chtějí, aby volba opravdu něco udělala. Skvělá motivace pro příště — slibte jim, že v 7. hodině to bude fungovat doopravdy.

Kdo je hotový dřív: proměnná int sirka = 44; a všechny čáry i PadRight odvozené od ní. Když pak změní jedno číslo, přizpůsobí se celá obrazovka.

Otázka na závěr hodiny: „Co by tvoje hra měla umět jako první věc příště?" Odpovědi si poznamenejte — v dalších hodinách se na ně dá odkazovat.

Řešení 5 — jedna z možných variant
reseni/reseni5_uvodni_obrazovka.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Program čte z konzole. Co sem napíšeš, to „odpoví" na každé Console.ReadLine() — jeden řádek na jedno čtení.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.

4. Domácí úkol

Blok 20Domácí úkol na příští hodinu4. Domácí úkol

Uprav svůj soubor Program.cs tak, aby úvodní obrazovka CsQuestu obsahovala:

  • vlastní název hry místo „CsQuest" a nadpis v rámečku ze znaků,
  • alespoň šest údajů o hrdinovi v proměnných (jméno, povolání, domov, úroveň, životy, zlato),
  • alespoň jeden výpočet přímo v interpolaci (útok, bojová hodnota, zlato po nákupu),
  • seznam tří míst, kam se dá vydat,
  • a na konci otázku, na kterou uživatel odpoví, a program odpověď zopakuje.

Ulož snímek obrazovky (nebo soubor Program.cs) a přines na příští hodinu.

Pro učitele

Úkol je schválně otevřený — nejde o správnou odpověď, ale o to, aby si dítě sedlo doma k počítači a znovu si otevřelo VS Code. Pokud to udělá, návyk je založený.

Na začátku příští hodiny si vyhraďte pět minut na promítnutí tří až pěti domácích úkolů. Nehodnoťte správnost, komentujte nápady. Kdo úkol nemá, nic se neděje — 2. hodina začíná od nuly u proměnných a typů.

Kdo nemá doma .NET, může úkol udělat přímo na téhle stránce v prohlížeči a výsledek poslat jako zkopírovaný text. Nikdo nemá výmluvu.

Zálohujte za ně. Řekněte jim, ať vám soubor Program.cs pošlou e-mailem nebo do sdílené složky. Za tři měsíce budete rádi, že máte zálohu, když někomu spadne notebook.

Zobrazit ukázkové řešení domácího úkolu

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.

domaci/domaci_ukol01.cs
Tady se objeví výstupKlikni na Spustit. Kód vlevo můžeš měnit a spouštět opakovaně klávesami Ctrl+Enter.
Program čte z konzole. Co sem napíšeš, to „odpoví" na každé Console.ReadLine() — jeden řádek na jedno čtení.
Kód vlevo jde upravovat. Tab odsazuje o čtyři mezery.
Blok 21Oficiální dokumentace4. Domácí úkol

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š
Console.WriteLine Console.WriteLine výpis textu s odřádkováním a všechny varianty
Console.Write Console.Write výpis bez odřádkování
Console.ReadLine Console.ReadLine přečtení řádku od uživatele
string Typ string textové proměnné a co s nimi jde dělat
int Celočíselné typy rozsahy celých čísel
$"..." Interpolace řetězců vkládání proměnných a výpočtů do textu
\n, \t, \" Escape sekvence seznam všech speciálních znaků
int.Parse int.Parse převod textu na číslo
PadRight String.PadRight doplnění textu mezerami zprava
PadLeft String.PadLeft doplnění textu mezerami zleva
new string(znak, počet) Konstruktor String vyrobení textu z opakovaného znaku
% (zbytek) Aritmetické operátory dělení, zbytek a celočíselné dělení
Top-level statements Program bez Main proč nám stačí psát rovnou příkazy
dotnet new / dotnet run Příkazy .NET CLI všechny příkazy pro práci s projektem
Jak s dokumentací pracovat na hodině

Nechte děti dokumentaci vidět, ale nenuťte je číst ji. Stačí, když si zapamatují, že existuje a že se tam dá dojít přes Google dotazem typu „c# console writeline docs".

Užitečný trik: ve VS Code stačí najet myší na Console.WriteLine a zobrazí se stejná nápověda přímo v editoru. To děti ocení víc než odkaz.

5. Umíme informatiku

Blok 22Navazující cvičení na Umíme informatiku5. Umíme informatiku

Pro rychlejší studenty, kteří dokončí cvičení dřív, nebo na posledních 10–15 minut.

Cvičení Odkaz Proč se hodí
Programování — základy umimeinformatiku.cz Pořadí příkazů a čtení kódu bez ohledu na jazyk
Želví grafika umimeinformatiku.cz Program jako posloupnost příkazů — přesně dnešní téma
Proměnné a výrazy umimeinformatiku.cz Co je v krabici po několika přiřazeních

Želví grafika je zde obzvlášť vhodná, protože procvičuje přesně tu dovednost, kterou děti dnes použily — přemýšlet o výsledku jako o posloupnosti příkazů, které se provedou v pořadí.

Jak to zařadit

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í, aby nerušily ostatní. Mějte odkaz připravený v záložkách prohlížeče, ať ho nemusíte hledat.

Dobrá alternativa pro rychlíky: ať si ve svém programu zkusí vyrobit rámeček s rohy ╔ ╗ ╚ ╝. Zabaví je to na deset minut a naučí je to počítat znaky.