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

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

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

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

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

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

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

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

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

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.