NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.
Mezi 10:00 až cca 10:30 proběhne odstávka sítě z důvodu aktualizace. Web bude po celou dobu nedostupný.

Diskuze – Lekce 5 - Podmínky (větvení) v jazyce C

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
Avatar
Odpovídá na DarkCoder
Tomas Bahensky:9.2.2018 20:09

Diky moc za reakci....akorat jsem tedy zjistil, ze je to krapet slozitejsi, nez jsem si myslel :))) Jsem samouk zacatecnik, takze se dostavam casto do slepych ulicek...

Nicmene jsem jsem mel na mysli priklad viz nize versus ta kalkulacka zminena o ctyri prispevky v diskuzi zpet.

int main()
{
char volba;
printf ("Vyber si nejakou postavu ze Simpsonovych: \n");
printf ("\n");

printf ("a) Homer \n");
printf ("b) Bart \n");
printf ("c) Marge \n");
printf ("d) Liza \n");
printf ("e) Maggie \n");
printf ("\n");

scanf ("%c", &volba);
switch (volba)
{
case 'a':
printf ("Jmeno: Homer Simpson \n");
printf ("Vek: 38 \n");
printf ("Zamestnani: bezpecnostni technik \n");
break;
case 'b':
printf ("Jmeno: Bart Simpson \n");
printf ("Vek: 10 \n");
printf ("Zamestnani: student \n");
break;
case 'c':
printf ("Jmeno: Marge Simpson \n");
printf ("Vek: 35 \n");
printf ("Zamestnani: zena v domacnosti \n");
break;
case 'd':
printf ("Jmeno: Liza Simpson \n");
printf ("Vek: 8 \n");
printf ("Zamestnani: studentka \n");
break;
case 'e':
printf ("Jmeno: Maggie Simpson \n");
printf ("Vek: 8 mesicu \n");
printf ("Zamestnani: batole \n");
break;
}
return (0);
}

Na prvni pohled mi to prislo jako stejna konstrukce, ale evidentne to tak neni. Kdyz dam do tohoto prikladu se Simpsnovejma jednoduchy cisla bez zavorek, tak to nefunguje, kdezto u kalkulacky jo. A netusim proc. Jestli jsi to v tom predchozim prispevku vysvetlil, tak se omlouvam, ale zrejme jsem to nepochopil :)

Diky!

 
Odpovědět
9.2.2018 20:09
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Tomas Bahensky
DarkCoder:9.2.2018 22:11

Není to složité. Čím více si budeš s řídícími příkazy pohrávat, bude Ti to víc a víc jasnější.

Příkaz switch očekává nějaký identifikátor (v našem případě proměnnou volba). Proměnná volba je typu char, tedy je očekáván znak. Znak může být reprezentován mnoha způsoby. Tím nejčastějším je znak uzavřený mezi jednoduchými uvozovkami. Ale může být i číselně (každý znak má svoji ASCII hodnotu). Např. ASCII hodnota znaku 'A' je 65. A jelikože switch nesmí obsahovat dvě totožné hodnoty, je příklad v mém předchozím příspěvku nesprávný. I s čísly příklad se Simpsonovýma funguje. Viz. následující z důvodu jednoduchosti poupravené dva kódy, které jsou funkčně totožné:

Varianta s čísly

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void){
        char volba;

        printf("Vyber si nejakou postavu ze Simpsonovych\n\n");
        printf("a) Homer\n");
        printf("b) Bart\n");
        printf("c) Marge\n");
        printf("d) Liza\n");
        printf("e) Maggie\n\n");

        volba = getchar();
        fseek(stdin, 0L, SEEK_END);

        switch (volba){
                case 97:  printf("Homer Simpson\n");
                                break;
                case 98:  printf("Bart Simpson\n");
                                break;
                case 99:  printf("Marge Simpson\n");
                                break;
                case 100: printf("Liza Simpson\n");
                                break;
                case 101: printf("Maggie Simpson\n");
                                break;
        }

        return 0;
}

Varianta se znaky

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void){
        char volba;

        printf("Vyber si nejakou postavu ze Simpsonovych\n\n");
        printf("a) Homer\n");
        printf("b) Bart\n");
        printf("c) Marge\n");
        printf("d) Liza\n");
        printf("e) Maggie\n\n");

        volba = getchar();
        fseek(stdin, 0L, SEEK_END);

        switch (volba){
                case 'a':  printf("Homer Simpson\n");
                                break;
                case 'b':  printf("Bart Simpson\n");
                                break;
                case 'c':  printf("Marge Simpson\n");
                                break;
                case 'd': printf("Liza Simpson\n");
                               break;
                case 'e': printf("Maggie Simpson\n");
                               break;
        }

        return 0;
}
Odpovědět
9.2.2018 22:11
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Tomas Bahensky
DarkCoder:9.2.2018 22:53

A takto to máš s čísly jako volba menu:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void) {
        int volba;

        printf("Vyber si nejakou postavu ze Simpsonovych\n\n");
        printf("1) Homer\n");
        printf("2) Bart\n");
        printf("3) Marge\n");
        printf("4) Liza\n");
        printf("5) Maggie\n\n");

        scanf("%d", &volba);

        switch (volba) {
        case 1:  printf("Homer Simpson\n"); break;
        case 2:  printf("Bart Simpson\n"); break;
        case 3:  printf("Marge Simpson\n"); break;
        case 4:  printf("Liza Simpson\n"); break;
        case 5:  printf("Maggie Simpson\n"); break;
        }

        return 0;
}

To nejpodstatnější je typ řídící proměnné, specifikace formátu ve funkci scanf() a zápis case.

Odpovědět
9.2.2018 22:53
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Tomas Bahensky
DarkCoder:9.2.2018 23:16

S číselnou volbou jako znaky

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void) {
        char volba;

        printf("Vyber si nejakou postavu ze Simpsonovych\n\n");
        printf("1) Homer\n");
        printf("2) Bart\n");
        printf("3) Marge\n");
        printf("4) Liza\n");
        printf("5) Maggie\n\n");

        volba = getchar();
        fseek(stdin, 0L, SEEK_END);

        switch (volba) {
        case '1':  printf("Homer Simpson\n"); break;
        case '2':  printf("Bart Simpson\n"); break;
        case '3':  printf("Marge Simpson\n"); break;
        case '4':  printf("Liza Simpson\n"); break;
        case '5':  printf("Maggie Simpson\n"); break;
        }

        return 0;
}
Odpovědět
9.2.2018 23:16
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Tomas Bahensky:10.2.2018 14:06

Diky DarkCoder! Uz mi to zacina byt jasny.... :) Cele to je tedy o tom, jaky typ promenne definuji a zdali ma byt vkladana promenna cislo nebo znak. Podle toho pouziji bud samotne cislo (odpovidajici potrebnemu znaku v ASCII), cislo v zavorkach a nebo znak v zavorkach. Je to tak?

A jeste posledni otazku, jak tu vlozim do diskuze priklad tak, aby byl graficky zobrazen jako v compileru a ne jako prosty text (ctrl C, ctrl V)?

Diky!

 
Odpovědět
10.2.2018 14:06
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Tomas Bahensky
DarkCoder:10.2.2018 15:17

Přesně tak. Celé to je o typu a o tom, jak danou proměnnou zpracováváš. Příklad, kde znaku odpovídá číslo, ber z hlediska zajímavosti. Takto bys to ve skutečnosti dělat neměl, ale jsou případy, kdy se to velmi hodí. Stejně tak by bylo nesmyslné, abys číslo reprezentoval znakem.

Jednoduše, je-li identifikátor typu znak, použij znak uzavřený mezi jednoduché uvozovky, je-li celočíselný, použij celočíselnou hodnotu bez jakýchkoli uvozovek. Př.

char cVolba;

switch(cVolba){
  case 'a': //...
}

nebo

int iVolba;

switch(iVolba){
  case 1: //...
}

Výše uvedené příklady jsou primitivní, ale v komplexních úlohách si můžeš vypomoci prefixem, kde Ti i letmý pohled na identifikátor řekne jakého je typu a jak s ním pracovat (Např. cVolba, iVolba, pVolba apod.).

Pro zobrazení kódu jako v překladači použij párový tag (vložení zdrojového kódu, je umístěn nad textovým polem) do kterého následně vložíš zdrojový kód.

Odpovědět
10.2.2018 15:17
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Tomáš Daniel:4.5.2018 8:48

PROČ TA DAL NAJEDNOU ("%lf") a ne pouze ("%f")???

Odpovědět
4.5.2018 8:48
Proč chtít cokoliv jiného, než IT
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Tomáš Daniel
DarkCoder:4.5.2018 11:24

Specifikator formátu %lf se používá ve funkci scanf() pro načtení proměnné typu double. Oproti tomu specifikator formátu %f se používá ve funkci scanf() pro načtení proměnné typu float. Ve funkci printf() se pro výpis proměnné typu float i double používá specifikator formátu %f.

Odpovědět
4.5.2018 11:24
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Jan Tesař
Člen
Avatar
Jan Tesař:24.11.2019 8:58

Ahoj, v příkladu s odmocninou je chyba, odmocnina z nuly existuje - je to nula, s rovnítkem by měla být ta první podmínka. Honza

 
Odpovědět
24.11.2019 8:58
Avatar
Guláš
Člen
Avatar
Guláš:19.3.2020 8:55

Ahoj
Nepochopil jsem co znamená toto double o = sqrt(a); ??

 
Odpovědět
19.3.2020 8:55
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 43.