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 – 3. diel - Premenné a typový systém 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
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Samuel Kodytek
DarkCoder:5.10.2016 20:55

Více méně první díl výkladu jazyka C a hned v něm spousta nepřesností, neúplných informací a učení špatným návykům! Některé už zde padly v diskuzi, přesto nebyly opraveny. Nováček tak už na začátku pobírá informace, které ho učí nesprávným postupům a zvykům, což by se stávat nemělo.

Takže pojďme na to:

Proměnné
To co zpracovává informace ohledně datových typů není jazyk C ale překladač jazyka C. Jazyk C a obecně programovací jazyk je pouze soubor pravidel a prostředek pro zápis algoritmů.

Program vypisující proměnnou
Už to zde v diskuzi padlo a za více než dva roky to nebylo opraveno. Zadání programu by se nemělo lišit od toho, co se skutečně v programu vypisuje (viz hodnota 8 a 56).
Pokud pracujeme s konstantami, je třeba hlídat si datové typy. Hodnota 56.6 sama o sobě není hodnotou float ale double, která je ovšem konvertována v přiřazovacím příkaze na typ float. Pokud chci zadat konstantu jako float, je třeba ji zapsat jako 56.6F. Program se však chová správně neboť typ pravé strany se převádí na typ levé strany.
Pro výpis proměnné typu float se užívá %f nikoli %g. %g popřípadě %G se používá pro výpis normálního nebo semilogaritmického tvaru, podle toho, který je kratší.

program papoušek
Zde je toho opravdu dost špatně. Funkce scanf() se nepoužívá pro načítání znaků! Důvodem je, že načítání se provádí dokud nestiskneme klávesu Enter. Na obrazovce se vypíše první znak ale ostatní znaky zůstávají ve vstupním buferu, což může být a dost často je, nežádoucí pro další vstupní operace. Pro načítání znaků se užívají funkce getchar(), getche(), getch(). Dále proměnná a je definována jako znaková proměnná, ne jako pole znaků!!! Jak do této proměnné, kam se vejde pouze jeden znak, chcete uložit řetězec znaků?! Dále nepřesnosti v popise, celé číslo místo znakové proměnné a /n místo \n pro výpis nového řádku.

Program zdvojnásobovač
Existuje pouze ASCII (American Standard Code for Information Interchange) ne ASCI.

Jednoduchá kalkulačka
Pokud inicializujeme proměnnou s desetinnou čárkou typu float, nelze psát

float a = 12; // spatne

ale

float a = 12.0F;

je třeba udávat číslo s desetinnou tečkou a případným sufixem. Ve vašem případě dochází v příkazu k implicitnímu přetypování z typu int na float! O použití escape sekvence %g a %f viz výše v odstavci - Program vypisující proměnnou.

Při výkladu je třeba být důsledný, vyvarovat se chybných informací a špatným návykům.

Odpovedať
"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:13.2.2017 18:33

Program Papoušek jsem odstranil, Monarezio se jej snažil portovat z příkladů z vyšších jazyků, kde se dá rozumně načítat i text, ale bohužel tady byl spíše matoucí. Nějaké tvé připomínky jsem zapracoval, ale dost z nich mi přijde zbytečných a určitě bych neoznačoval to, že se někde přetypuje hodnota za špatný návyk, vždyť se to kompiluje.

Odpovedať
New kid back on the block with a R.I.P
Avatar
DarkCoder
Člen
Avatar
Odpovedá na David Hartinger
DarkCoder:13.2.2017 19:39

Je skvělé, že se zapracovalo na korektuře. Je mi jasné, že není v silách pročítat a opravovat vše co se zde na fóru napíše. Příspěvků je opravdu hodně, což je jedině dobře. Ale pro výukové bloky, jakými tutoriály bezesporu jsou, je to nezbytné. Nováčci to jistě ocení a rozhodně to přispěje ke zlepšení jejich dovedností v daném tématu.

K programu Papoušek, myšleno to bylo určitě dobře, ale přesně jak píšeš, bylo to matoucí. Co se týká implicitního přetypování, ano, kompiluje se to, ale programátor by měl vědět, že dochází k manipulaci s jeho proměnnou. Je to důležité a to hned ze dvou důvodů. Tím prvním je, že v určitých situacích může dojít k určité ztrátě informace, která může být důležitá a tato chyba se pak velmi těžko dohledává. Ta druhá je naučit programátora pozornosti a korektnímu přebírání argumentů funkci správných typů. Jak tak totiž sleduji příspěvky a zejména zdrojové kódy zde na fóru, je to neřest, která se vyskytuje opravdu v hojné míře. Vskutku málokdo si uvědomuje, jak důležité je odladění. Varovné hlášky kompilátoru mají svůj účel, proto jsem se o tom ve svém příspěvku zmínil.

Zde bych chtěl určitě vyzdvihnout uživatele Martin Dráb, který opravdu této problematice věnuje zvýšenou pozornost, bez které by funkčnost skutečného (náročného) projektu byla velmi nestabilní.

Každopádně skvělé, že si se do toho pustil a díky za reakci.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Filip Kapajčík:18.2.2018 19:54

Zdravím, chcel by som poďakovať tvorcom za tento web, som akurát v prvom ročníku na aplikovanej informatike a vaše lekcie mi veľmi pomáhajú. Teší ma že sú na svete ľudia ktorý chcú odovzdať svoje vedomosti aj nám ostatným :)

Avatar
0
Člen
Avatar
0:20.10.2019 8:52

Nevíte někdo co dělám špatně???

Avatar
Odpovedá na 0
Neaktivní uživatel:20.10.2019 10:39

Řekl bych, že se snažíš spustit .ico

Odpovedať
Neaktivní uživatelský účet
Avatar
Guláš
Člen
Avatar
Guláš:1.12.2019 19:50

Proč se ukazuje operace: sčítaní,dělení atd před výsledkem ,když jsme to napsaly u pritnf na konec?

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Guláš
DarkCoder:1.12.2019 20:20

Funkce printf() je tvořena formátovacím řetězcem a dalšími argumenty. Počet dalších argumentů musí odpovídat počtu specifikací formátu ve formátovacím řetězci.

Máme-li např.

printf("Soucet: %f \n", soucet);

Tak to říká, že se vypíše slovo Soucet: a poté se očekává výraz s desetinnou čárkou. soucet na konci říká, že právě tato proměnná se vypíše na pozici kde se specifikace formátu %f nachází.

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

Dík už to chápu.

Avatar
Petricek58
Člen
Avatar
Petricek58:10.1.2020 23:06

Dobrý den,
opsal jsem kód kalkulačky a nefungoval mi, tak po několika minutách hledání jsem zkopíroval váš kód a vložil jej místo toho svého a zase chyba.
https://ctrlv.cz/xqrt

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