Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
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 – 6. diel - Podmienky (vetvenia) v C# .NET

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
Solarian
Člen
Avatar
Odpovedá na petrph
Solarian:1.2.2014 11:12

Moc děkuji za radu. Nechala jsem nad switchem jenom bool ano a pod switch jsem dala if (boll = true) funguje to :)
A dík za vysvětlení rozdílu mezi boolean a bool.

Odpovedať
Hlupáci dělají stále stejné hlouposti. Ti šikovnější stále nové.
Avatar
petrph
Člen
Avatar
Odpovedá na Solarian
petrph:1.2.2014 11:46

Santa Maria Velacružská, ještě to není ono.:(
Nemůžeš napsat ani if (boll = true).Tedy za prvé dosud jsi používala proměnnou s názvem ano-tak u ní zůstaň. Nevím jestli sis udělala jinou proměnnou boll typu bool (tedy text bool boll ?) ale jestli používáš obě, tak to neodladíš (co máš v tom switch ..default-proměnnou ano nebo boll?)Tak tu stejnou všude, i v podmínce.
ZA druhé, nemůžeš napsat ani if (ano = true) poněvadž operátor = neprovádí porovnání (test podmínky), ale přiřazení. Čili, ty jsi mu napsala příkaz přířazení true do proměnné. A co s tím udělal if se ani neptej:( Asi už ti stejně dole v panelu překladu křičí warning... Takže správně je if (ano==true)-tedy dvě rovnítka za sebou jako operátor porovnání. Nebo tedy zkráceně u proměnné typu bool můžeš napsat if (ano) - tím se myslí true.

Ale vydrž to se naučíš, víš že první programátor na světě byla holka?
http://www.zapnimozek.cz/…ogramatorka/

Avatar
Solarian
Člen
Avatar
Odpovedá na petrph
Solarian:1.2.2014 12:25

Dík za ten článek, ten fakt potěšil :D
Já už na to přišla, že je to nesmysl (to if(bool = ano))Je to podtržené zelenou vlnovkou, ale vypisovalo se to.
Teď jsem pro změnu napsala

bool ano = ((volba == 1) && (volba == 2) && (volba == 3) && (volba == 4));
            ano = true;

To mám před switch, a pod ním

if (ano)
                Console.WriteLine("Výsledek je {0}", vysledek);

Jenže ono to funguje jen když dám správnou volbu. Když dám špatnou, tak to napíše Neplatná volba a pod to ještě Výsledek je 0. A žádný warning u toho není.
Tak nevím, asi to přestanu řešit, protože if a else if mi připadá fakt jednodušší.

Odpovedať
Hlupáci dělají stále stejné hlouposti. Ti šikovnější stále nové.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovedá na Solarian
Jan Vargovský:1.2.2014 13:05

No ještě trošku doplňim pár věcí. Ten kód by mohl vypadat aspoň takhle

bool spravne = true;

       switch (volba)
       {
           case 1:
               vysledek = a + b;
               break;
           case 2:
               vysledek = a - b;
               break;
           case 3:
               vysledek = a * b;
               break;
           case 4:
               vysledek = a / b;
               break;
           default: spravne = false;
               break;
       }
             if (spravne)
             Console.WriteLine("Výsledek je {0}", vysledek);
               else
            Console.WriteLine("Neplatná volba");

Teď se vyjádřím k těm blbostem co jsi psala ty :)

U tohoto příkladu je zbytečné dělat buď a nebo. Ten program to dokáže bez toho. Navíc by to šlo celé zkrátit hned na začátku, že by ses ptala, jestli ten switch to má vůbec udělat. (bylo by tam if(ano) switch(...){...} )

bool ano = ((volba == 1) && (volba == 2) && (volba == 3) && (volba == 4));
       bool ne = ((volba == 0) || (volba >= 5));
       switch (volba)
       {
           case 1:
               vysledek = a + b;
               break;
           case 2:
               vysledek = a - b;
               break;
           case 3:
               vysledek = a * b;
               break;
           case 4:
               vysledek = a / b;
               break;
           default: Console.WriteLine("Neplatná volba");
               break;
       }
             if (ano)
             Console.WriteLine("Výsledek je {0}", vysledek);
               else if (ne)
            Console.WriteLine("Neplatná volba");

Proměnná typu bool a boolean je úplně to samé. Jen to má jinačí název (v C# existují tzv. aliasy k některým typům (hodnotové jako: string, bool, int apod.)

Ta druhá část kódu je dobrá. Ale podívej se na první 2 řádky. Ty té proměnné ano přiřadíš nějakou hodnotu a potom jí stejně nastavíš true. Takže program tam testuje tu volbu jestli je ekvivalentní k 1 a zároveň k 2 a zároveň k 3 a zároveň k 4 - jak může mít nějaký int najednou 4 hodnoty ? :) použil bych tam alespoň logické OR (||) a pak ten druhý řádek můžeš smazat.

bool ano = ((volba == 1) && (volba == 2) && (volba == 3) && (volba == 4));
             ano = true;

if (ano)
                 Console.WriteLine("Výsledek je {0}", vysledek);

.

Jenže ono to funguje jen když dám správnou volbu. Když dám špatnou, tak to napíše Neplatná volba a pod to ještě Výsledek je 0. A žádný warning u toho není.

Nevím jak vypadá ten kód, ale když se podívám na ten poslední, tak vypisuješ neplatná volba 2x (jednou už v tom switchi a pak pomocí else větve), už když máš 2x vypisování té samé věci v programu - něco je špatně.

Editované
Avatar
petrph
Člen
Avatar
Odpovedá na Solarian
petrph:1.2.2014 13:19

Ach jo,z toho co teď popisuješ jako špatnej výsledek, se dá vyčíst že sis do kódu vrátila ty stejný chyby jako ji je měla na začátku. Kdyžtak vyčkej já ti pošlu za chvíli jak to má být jako soukromou zprávu, ať si i jiní popřemýšlejí a nedáváme sem hotové řešení příkladu.
Ale radši to nezkoušej s pomocí if to by možná dopadlo stejně špatně - ten operátor && dělá něco jinýho než si myslíš...

Avatar
Solarian
Člen
Avatar
Odpovedá na Jan Vargovský
Solarian:1.2.2014 13:30

Tak teď už to snad chápu.
Nastavím bool spravne na true a pak dám do default: spravne = false. A tím ten program bere vše kromě case jako špatně. Já se to snažila udělat obráceně(nastavit to, co má být true.
Dík za trpělivé vysvětlování :)

Odpovedať
Hlupáci dělají stále stejné hlouposti. Ti šikovnější stále nové.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovedá na Solarian
Jan Vargovský:1.2.2014 13:48

Od toho tu jsme :)

Avatar
Odpovedá na David Hartinger
Lukáš Nový:8.2.2014 21:41

Ahoj sdraco, mám pár nejasností, poraď mi pls (moje otázka k danému bodu je většinou text v komentáři) :

1.

if (30 < 4) /* při tomto použití píše že console je nedostupný */
                Console.WriteLine("Pravda");
            Console.WriteLine("Program zde pokračuje dál");

Vím že napsat že 30 je menší než 4 je kravina, ale zkusil sem to a zajímalo by mně pro zrovna console je nedostupný?

2.

if (30 > 4)
                Console.WriteLine("Pravda");
            Console.WriteLine("Program zde pokračuje dál"); /* jaktože tady nemusí být příkazy ve slož. závorkách když jich je více než jeden? mě to funguje bez nich */
            Console.ReadLine();

3.

Console.WriteLine("zadej nějaké číslo pro výpočet odmocniny");
           int b = int.Parse(Console.ReadLine());
           if (b > 0)

               Console.WriteLine("zadal jste číslo větší než 0, takže lze odmocnit");
               double odm = Math.Sqrt(b);
               Console.WriteLine("Odmocnina z čísla " + b + " se rovná: " + odm);
               //při použití slož. závorek a zadání mínusového čísla se nestane nic
               // při nepoužití slož. závorek a zadání mínusového čísla se vypíše:  Odmocnina z čísla (např.) -3 Není číslo

Jaktože to vypíše text který jsem nezadal: (Není číslo)?

4. Píšou se za příkaz else v případě více příkazů složené závorky?

5. V případě řešení vylepšené kalkulačky za pomoci podmínky if, z toho textu pořádně nerozumím proč musí mít

float vysledek;

přiřazenou hodnotu 0, zkusíš mi to vysvětlit jinak?

6. Zkoušel jsem do slož. závorek switche přidat

default :
                    Console.WriteLine("Zadal jste neplatnou volbu");

Ale vyhazuje to chybu: Control cannot fall through from one case label ('default:') to another (z chyby nedokážu porozumět jak to má být správně).

DÍKY za trpělivost na odpovídání mých šesti dotazů. :-)

Editované
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovedá na Lukáš Nový
Jan Vargovský:8.2.2014 21:58

1. VS by tě mělo spíše upozornit (podbarvit zeleně), že ten kód se nikdy neprovede, je to jako kdybys napsal rovnou if(false).
2. 4.

1 if (30 > 4)
     2 Console.WriteLine("Pravda");
3  Console.WriteLine("Program zde pokračuje dál");
4 Console.ReadLine();

Ten kód vypadá zformátovaný nějak takhle. Když by ta podmínka byla true, tak se udělá 2,3,4. Zatím co, kdyby byla ta podmínka false, tak se ti provede jen 3,4 a ta 2 patří k té podmínce.

Vždycky, když máš nějakou podmínku, cyklus nebo cokoliv co má vnitřní blok, tak když chceš více příkazů, musíš je dát do složené závorky, když chceš jen 1, nemusíš tam ty složené závorky psát.
3. To je to samé, ten problém, že když nepíšeš složené závorky, tak ta podmínka patří jen k tomu prvnímu řádku

if (b > 0)
     Console.WriteLine("zadal jste číslo větší než 0, takže lze odmocnit");
double odm = Math.Sqrt(b);
Console.WriteLine("Odmocnina z čísla " + b + " se rovná: " + odm);

Pak hned poznáš co kde patří. Raději všude piš složené závorky, časem tě bude štvát, že ten kód je občas dlouhý a složené závorky ho zbytečně zvětšují o víc jak 50%.
5. občas ti kompilátor zahlásí, že se snažíš pracovat s proměnnou, která není inicializována. V případě hodnotových typů (int,char, ...) to ani tak nevadí, ale když budeš pracovat s třídami, tak ty mají defaultní hodnotu null.
6. Chybí ti tam default. Když nenapíšeš break; tak ti to propadává o větev dolů (další case, který je hned pod tím) ale tam

Editované
Avatar
Odpovedá na Jan Vargovský
Lukáš Nový:9.2.2014 22:18

Díky za odpovědi, ještě mi k tomu bodu 3. napiš kde se vzal ten text "Není číslo" ? při zadání mínusového čísla se tento text vypíše. Já sem ho tam nikde nezadával. Kde se vzal?

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 173.