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
DarkCoder
Člen
Avatar
Odpovídá na Guláš
DarkCoder:19.3.2020 10:43

Příkaz

double o = sqrt(a);

představuje deklaraci proměnné o a zároveň její inicializaci voláním funkce sqrt() s argumentem a.

Odpovědět
19.3.2020 10:43
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Guláš
Člen
Avatar
Odpovídá na DarkCoder
Guláš:19.3.2020 10:59

díky

 
Odpovědět
19.3.2020 10:59
Avatar
Guláš
Člen
Avatar
Guláš:19.3.2020 11:03

printf ("\n"); to odděluje dva příkazy ?

 
Odpovědět
19.3.2020 11:03
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Guláš
DarkCoder:19.3.2020 11:14

To co odděluje dva příkazy od sebe je středník.

printf ("\n");

Význam výše uvedeného příkazu je odřádkování. Použití funkce printf() je v tomto případě nešťastné. Argument uvnitř funkce \n je znaková konstanta a pro samotné odřádkování by se měl použít následující příkaz:

putchar('\n');

Funkce putchar() potřebuje mnohem méně strojových instrukcí a bude tak rychlejší nežli funkce printf().

Pokud ale součástí formátovacího řetězce bude i jiný znak než jen znak nového řádku, pak je třeba použít funkci printf().

Odpovědět
19.3.2020 11:14
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Guláš
Člen
Avatar
Guláš:21.3.2020 18:12

Ahoj chtěl jsem ,aby když celek bude menší než 100 aby to nevypsalo darek. Nevíte kde je chyba ??

int rohlik ;
int jabko;
int chleba;
int volba;
int kolik;
char pokracovat;
int celek;
int darek;
printf("vítejte v obchodě \n");
do
{
printf("zvolte pocet produktů\n");
scanf("%d",&kolik);
printf("1-rohlik\n");
printf("2-jabko\n");
printf("3-chleba\n");
printf("zvolte produkt\n");
scanf("%d",&volba);
switch(volba)
{ case 1:
rohlik = 2 * kolik ;
printf("rohliky stoji %d korun \n",rohlik);
break;

case 2:
jabko = 5 * kolik ;
printf(" jabka stoji %d korun \n",jabko);
break;

case 3:
chleba = 10 * kolik;
printf(" chleba stoji %d korun \n",chleba);
break;
}
celek = rohlik + jabko + chleba ;
printf("nakup stoji %d korun \n",celek);
if (celek => 100)

darek = celek / 100 ;
printf("dostanete %d darek/u \n", darek );

printf("Prejete si zadat dalsi nakup? [1/0]");
scanf("%d", &pokracovat);
}while (pokracovat == 1);
return (EXIT_SUCCESS);
}

 
Odpovědět
21.3.2020 18:12
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Guláš
DarkCoder:21.3.2020 21:11
if (celek >= 100){
        // nárok na dárek
}
else {
        // bez nároku na dárek
}

Pokud nebudeš se sekcí, kde celek < 100 pracovat, můžeš celý blok else vynechat. Což je tvůj případ. Jinak podmínka větší rovno má tvar >= nikoli =>.

Aby si provedl více příkazů v rámci platné podmínky, je třeba příkazy uzavřít do bloku mezi složené závorky.

if (celek >= 100){
        // příkaz 1
        // příkaz 2
        // …
        // příkaz N
}

Pokud provádíš pouze jeden příkaz, závorky psát nemusíš.

Pokud vícero nepracuješ s proměnnou, jen vypisuješ její hodnotu získanou výsledkem nějakého výrazu, pak tuto proměnnou nemusíš vůbec deklarovat a její výpis můžeš provést ve funkci printf() jako argument funkce. Argumentem funkce je pak výraz potřebný pro získání té dané proměnné. Pro začátek ale není na škodu si tuto proměnnou deklarovat.

Odpovědět
21.3.2020 21: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 Guláš
DarkCoder:21.3.2020 21:22

Ještě jedna věc. V profi psaných programech nikdy neuvidíš kód jako je tento:

if (celek >= 100){
        // nárok na dárek
}

Obvykle to bude zkušeným programátorem napsáno třeba takto:

#define NAROK_NA_DAREK 100

if (celek >= NAROK_NA_DAREK){
        // nárok na dárek
}

To umožňuje mít větší kontrolu na kódem a vyhnout se chybě, pokud by se změnila hodnota, kdy je nárok na dárek a náhodou se hodnota 100 někde v programu nezměnila. Takto stačí změnit hodnotu makra na začátku programu.

Odpovědět
21.3.2020 21:22
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Guláš
Člen
Avatar
Odpovídá na DarkCoder
Guláš:23.3.2020 9:07

díky

 
Odpovědět
23.3.2020 9:07
Avatar
DarkCoder
Člen
Avatar
DarkCoder:31.12.2021 1:10

Když někdo upozorňuje na chyby v článku, proč se neprovádí korektura?

Tak ještě jednou..

! - negace, není relační operátor ale logický. Operátory && a || jsou rovněž logické, žádné základní. Chybí tabulka výsledku logických operací. Pokud lze určit výsledek logického výrazu, neprovádí se další testy.

Když už se rozebírají operátory, je dobré zmínit co je priorita a asociativita. A jak to lze ovlivnit za pomocí závorek.

Používáme-li funkci, kontroluji nejen její návratový typ ale i typy parametrů které přebírá. Funkce sqrt() opravdu nepřebírá typ int. Argumentem funkce je typ double. Takže buď proměnná a bude typu double nebo je třeba argument přetypovat na double.

Pro výpis proměnné typu double za pomocí funkce printf() se používá %f nikoli %lf.

Proměnná může být definována nikoli deklarována vždy jen jednou. Při definování je vyhrazena paměť, při deklarování nikoli. Deklarovat proměnnou aniž bychom ji definovali lze např. pomocí klíčového slova extern.

Chybí zásadní informace a to, že za pravdivou hodnotu se považuje jakákoli nenulová hodnota nikoli jen hodnota 1. Nepravdivá hodnota je kde výraz v podmínce je roven 0.

Nakonec zde mohla být zmínka o ternárním operátoru ?:

Odpovědět
31.12.2021 1:10
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Jaroslav Strmiska:26.7.2022 18:41

V kódech jsou chyby. Např. v kalkulačce se switchem není dosazena počáteční hodnota proměnné <výsledek>.

 
Odpovědět
26.7.2022 18:41
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.