IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 6. diel - Cykly v céčko

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
Avatar
Patas007
Člen
Avatar
Patas007:13.4.2015 16:52

Kód

int i;
for (i = 0; i <= 10; i++)
printf("%d ", i);

nevytiskne řadu čísel od jedné do deseti, ale OD NULY do deseti.

 
Odpovedať
13.4.2015 16:52
Avatar
Samuel Kodytek
Tvůrce
Avatar
Odpovedá na Patas007
Samuel Kodytek:14.4.2015 8:25

Díky za připomínku, upravím ten kód :)

Odpovedať
14.4.2015 8:25
There is more than one way to screw it
Avatar
Luka Lukašević:8.1.2016 11:27

Dobry den, chtel bych se zeptat jak ve while cyklu docilit nacitani cisel pomoci scanf dokud nenarazim na EOF. Nejsem si jisty jak bych to mel do sveho kodu spravne implementovat aby mi to fungovalo.

Predem dekuji za odpoved. (omlouvam se ze nepouzivam hacky a carky, ale mam pocitac z nemecka kde hacky a carky nemam )

 
Odpovedať
8.1.2016 11:27
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovedá na Luka Lukašević
Jindřich Máca:9.1.2016 16:45

Zdravím! Tady se stačí podívat do dokumentace funkce scanf() http://www.cplusplus.com/…stdio/scanf/?… a zjistíte, že ona přímo vrací hodnotu EOF, pokud k němu dojde. :D To znamená, že pro načítání v cyklu while lze napsat přímo:

int x;
while (scanf("%d", &x) != EOF) {
…

Tento postup může ale mít i svoje úskalí, jelikož např. EOF je vraceno i při chybě a ne jenom při konci vstupu, ale pro jednoduchost to takhle stačí. ;)

Doufám, že i toto vysvětlení je dostačující. :)

Editované 9.1.2016 16:46
 
Odpovedať
9.1.2016 16:45
Avatar
Odpovedá na Jindřich Máca
Luka Lukašević:9.1.2016 19:12

Moc dekuji! :) vysvetleni dostacujici a moc jste mi pomohl.

Jeste jednou dekuji.

 
Odpovedať
9.1.2016 19:12
Avatar
DarkCoder
Člen
Avatar
DarkCoder:6.10.2016 12:04

Článek ukazuje použití tří cyklů. Bohužel vůbec nevystihuje ohebnost a sílu cyklu FOR. FOR cyklys je zde prezentován tak jak jej známe z ostatních programovacích jazyků.

Tento cyklus má stanovený pevný počet opakování a hlavně obsahuje tzv. řídící proměnnou (celočíselnou)
, ve které se postupně během běhu cyklu mění hodnoty. Syntaxe (zápis) cyklu for je následující:

Řídící proměnná rozhodně nemusí být celočíselná, nemusí vůbec měnit svoji hodnotu a dokonce zde nemusí být vůbec, neboť jsou i jiné způsoby, jakými ukončit cyklus. Důvodem proč je cyklus FOR tak pružný je to, že neklade žádné omezení na typy výrazů, které obsahuje. Výraz může být v cyklu i prázdný!

V článku o cyklech rovněž chybí informace o vytvoření nekonečného cyklu a příkazech BREAK a CONTINUE

Editované 6.10.2016 12:05
Odpovedať
6.10.2016 12:04
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na DarkCoder
David Hartinger:6.10.2016 12:19

Co píšeš tu je napsané dále, konkrétně zde - http://www.itnetwork.cz/…y-v-jazyce-c Dobrý tutoriál by tě neměl zasypat hned ze začátku fakty co všechno jde, ale dát ti pevný základ a další syntaxi přidávat postupně. Tyto praktiky navíc ani někdy nejsou považované za správné, i když je pravda, že v céčku se to více toleruje, jelikož je to jazyk nižší. Doplním do článku link na pokročilý článek, abyste si vy pokročilí nemysleli, že tu něco zatajujeme.

Editované 6.10.2016 12:19
Odpovedať
6.10.2016 12:19
New kid back on the block with a R.I.P
Avatar
DarkCoder
Člen
Avatar
Odpovedá na David Hartinger
DarkCoder:6.10.2016 13:12

V pořádku, čtenář má pak jen pocit, že to co v článku bylo uvedeno, je vše. Stačilo se zmínit o jeho pružnosti a to, že si nyní představíme jeho základní variantu. Uvádět odkaz na pokračování dané problematiky je důležité, viz. Váš článek č. 7 Pole, kde se odkazujete na použití vícerozměrných polí a pro práci s řetězci. Příkaz break již už byl autorem použit v předchozím díle a tak jsem očekával, že se zmíní o něm i zde, v článku o cyklech. Jeho užití na rozdíl od příkazu continue řadím k základním programovacím technikám. Tyto příkazy skoku jsou přijímány a tolerovány, aby ne, když usnadňují práci. Ve výsledku i příkaz skoku goto, který nemá zrovna dobrou pověst, je programátory užíván, aniž by to podvědomě věděli. Děkuji za reakci.

Odpovedať
6.10.2016 13:12
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na DarkCoder
David Hartinger:6.10.2016 15:03

Break je tam použitý jen ve switchi, kde označuje logicky spíše konec bloku příkazů než že by člověk úmyslně něco přerušoval, i když z hlediska jazyka dělá samozřejmě totéž :)

Odpovedať
6.10.2016 15:03
New kid back on the block with a R.I.P
Avatar
DarkCoder
Člen
Avatar
Odpovedá na David Hartinger
DarkCoder:6.10.2016 16:04

On ten break ve switchi tam má skutečně funkci podobnou jako v cyklech a to ukončit daný switch. Bloky jsou dány a tvořeny seznamem příkazů v příslušném case, zde se zkrátka užití složených závorek vymezující blok nepoužívá. Ono totiž technicky vzato není příkaz break povinný. Vtip je v tom, že je-li příkaz break vynechán, pokračuje zpracování do dalšího příkazu case nebo default (pokud existují). Zpracování programu tak prochází skrz dokud nedojde na konec příkazu switch. O tom v předchozím článku nebyla ani zmínka. Téměř ve všech výkladech příkaz switch obsahuje příkaz break a to z důvodu, aby čtenář nebyl zmatený, aby pro každou konstantu switche měl spojenou konkrétní část programu a neměl pocit, že mu vše proplouvá skrz mezi prsty. :-) Tak to totiž znal ve spojitosti příkazu IF-ELSE. Zde to funguje jinak a určitý kód programu tak může být společný pro více konstant, což může být někdy žádoucí a dá se toho krásně využít. V tomto případě se využívá prázdná posloupnost příkazů v case, čímž se umožní dvěma nebo více case sdílet stejnou část kódu, viz. úryvek kódu..

char c;
printf("Zadej pismeno: ");
do {
        c = _getch();
} while (!isalpha(c));
switch(c) {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
        case 'y':
                printf("\nPismeno %c je samohlaska.\n\n", c);
                break;
        default: printf("\nPismeno %c je souhlaska.\n\n", c);
}
Odpovedať
6.10.2016 16:04
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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.

Zatiaľ nikto nevložil komentár - buď prvý!