NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 7. diel - Cykly v C# .NET - for a while

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
David Novák
Tvůrce
Avatar
Odpovedá 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
Odpovedá 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
Odpovedá 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
Odpovedá 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)) ;
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Jarda
Člen
Avatar
Odpovedá 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. januára 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. januára 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.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 210.