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 – 5. diel - Podmienky (vetvenia) v jazyku C

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
Odpovedá 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!

Avatar
DarkCoder
Člen
Avatar
Odpovedá 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;
}
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovedá 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.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovedá 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;
}
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá 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!

Avatar
DarkCoder
Člen
Avatar
Odpovedá 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.

Odpovedať
"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")???

Odpovedať
Proč chtít cokoliv jiného, než IT
Avatar
DarkCoder
Člen
Avatar
Odpovedá 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.

Odpovedať
"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

Avatar
Guláš
Člen
Avatar
Guláš:19.3.2020 8:55

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

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