NOVINKA: Začni v IT jako webmaster s komplexním akreditovaným online kurzem Tvůrce WWW stránek. Zjisti více:
NOVINKA: Staň se datovým analytikem a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Diskuze – Lekce 7 - Cykly v C# .NET - for a while

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Nejnovější komentáře jsou na konci poslední stránky.
Avatar
David Novák
Tvůrce
Avatar
Odpovídá na Marek Němec
David Novák:26.9.2023 8:25

Ahoj Marku, děkujeme za podnět. Tvůj podnět jsem předal k řešení.

Avatar
David Novák
Tvůrce
Avatar
Odpovídá na Libor Pavlík
David Novák:26.9.2023 8:27

Ahoj Libore, děkujeme za podnět. Lekci jsem předal k aktualizaci.

Avatar
David Novák
Tvůrce
Avatar
Odpovídá na Jiří Čičovský
David Novák:26.9.2023 8:28

Ne není. Jen aby to bylo odděleno od zbývajícího textu.

Avatar
Adéla Srbová:12.4.2024 23:03

Jediné, co musím vytknout je, že PadLeft() zde není využit, člověk si tuto funkci musí otestovat sám a tady nezjistí, co přesně dělá (ve zdrojovém kódu ukázky chybí)

Avatar
Jakub Kubále:18.6.2024 11:48

PadLeft() a PadRight()
Jelikož zatím nemáme znalosti k vytvoření takové tabulky, budeme si metody jen pamatovat a
vyzkoušíme si je dále v C# kurzu.

Dále v kurzu: Můžete si zkusit vypsané řádky upravit pomocí metody PadLeft()...

Jak? Je poměrně častým problémem, jak někde se naznačí, že něco existuje, a že se na to později podíváme, jen abychom se na to později podívali způsobem: a teď to použijte bez jediného vysvětlení.

Avatar
Jarda
Člen
Avatar
Jarda:12.5.2025 19:10

Ahoj, píšu kalendář a zlobí mne while smyčka. Přesněji řečeno, i když podmínka není splněna, funkce běží dál. Program po zadání 3 vypíše "Vypínání", a místo poděkování a ukončení pokračuje dál, kdy podmínku running vypíše False.
Koukám na to už půl hodiny a chybu prostě nevidím. Poradí někdo?

public bool Run()
        {
            while (running == true)
            {
                while (logedIn == false)
                {
                        //vypíše zda bool running je true nebo false
                    Console.WriteLine(running);
                    Console.WriteLine("Vyber možnost: ");
                    Console.WriteLine("1. Přihlášení uživatele ");
                    Console.WriteLine("2. Registrace uživatele ");
                    Console.WriteLine("3. Konec programu");
                    int input = Convert.ToInt32(Console.ReadLine());
                    if (input == 1)
                    {
                        activeUser = LogIn();
                        Console.WriteLine("Uživatel " + activeUser.GetName() + " přihlášen.");
                        logedIn = true;
                    }
                    else if (input == 2 && activeUser == null)
                    {
                        string name = InputName();
                        if (CheckDiary(name)) ;
                        string password = InputPassword();
                        RegisterUser(name, password);
                    }
                    else if (input == 3)
                    {
                        //nastaví bool running na false
                        running = false;
                        Console.WriteLine("Vypínání");
                    }
                }
                while (logedIn == true)
                {
                    Console.WriteLine("Vyber možnost: ");
                    Console.WriteLine("1. Vytvořit událost.");
                    Console.WriteLine("2. Najít událost dle data ");
                    Console.WriteLine("3. Odhlásit ");
                    int input = Convert.ToInt32(Console.ReadLine());
                    if (input == 1)
                    {
                        activeUser.AddEvent();
                    }
                    else if (input == 2)
                    {
                        activeUser.GetEventByDate();
                    }
                    else if (input == 3)
                    {
                        Console.WriteLine("Odhlašuji uživatele " + activeUser.GetName());
                        logedIn = false;
                    }
                }
            }
                Console.WriteLine("Děkuji za použití mého kalendáře.");
            return false;
        }

    }
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Jarda
DarkCoder:12.5.2025 20:00

Však si také ve vnitřním while cyklu a proměnnou logedIn, podle které se cyklus řídí, neměníš. Následná iterace vnitřního while se opět vyhodnotí jako true, což způsobí, že se cyklus opakuje.

Jinak toto asi také nebude úplně v pořádku:

if (CheckDiary(name)) ;
Odpovědět
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Jarda
Člen
Avatar
Odpovídá na DarkCoder
Jarda:13.5.2025 17:58

Ahoj, díky za reakci. Ta podmínka if (CheckDiary(name)) ; skutečně nebyla v pořádku. Stačilo odstranit vnitřní podmínku(přesunuto do samostatné funkce) a už to funguje :-)

Avatar
Sára Kočí
Člen
Avatar
Sára Kočí:4. ledna 21:42

Tahle kapitola byla dost nepřehledná, málo jednodušších příkladů a složité vysvětlování

Avatar
DarkCoder
Člen
Avatar
DarkCoder:5. ledna 11:27

Proč nikde nejsou zmíněny odborné názvy pro operátory ++ a -- ? Proč nikde nejsou zmíněny termíny pro i++, ++i, i--, --i ? Student pak nepozná pojmy z dokumentací, diskuzí, literatury. Terminologie je nástroj myšlení. Když znáš pojem, můžeš přesně popsat problém, přesně ho vyhledat, přesně o něm přemýšlet. Sdělovat že něco je před proměnnou nebo za ní je didakticky slabé.

Proč se neukazuje použití ve skutečných výrazech? Všechny příkazy jsou jen v základním tvaru nebo argumentu funkce. Chybí ukázka přiřazení, aritmetický výraz, kombinace s jinými operátory. Bez toho není vidět proč na pořadí záleží.

„doporučujeme tuto praktiku spíše nepoužívat“

To je strašně slabé varování. Formulace by měla být: Nepoužívejte pre/post inkrementaci jako součást výrazů, které mají jiný účel než samotnou změnu hodnoty.

Zkracování kódu by mělo být pojednáváno s vykřičníkem. To co je důležité je čitelnost, jednoznačnost, možnost snadné údržby.

Nikde není jediná zmínka o vedlejších efektech. Že ++ či -- mění stav programu. Chybí varování před skrytými změnami v argumentech funkcí. Kombinace více side efektů v jednom výrazu.

Není zde jediná zmínka o pořadí vyhodnocování výrazů, které je klíčové u i++ a ++i.

Chybí více negativních příkladů na kterých se dobře učí.

Vůbec nepracujete s mentálním modelem. Nevysvětlujete krok po kroku co se kdy stane. Spoléháte se jen na výsledný výpis.

Článek o operátoru ++ solidně popisuje chování operátoru ++, ale selhává ve výuce jeho smysluplného a bezpečného použití. Tohle jsou detaily které je třeba studentům přidávat.

Odpovědět
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Nejnovější komentáře jsou na konci poslední stránky.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 210.