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 – 6. diel - Rozdiel medzi textovými a binárnymi subor v C - dodatok

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
Patrik Pastor:1.9.2019 21:00

no mi to bez source souboru nebralo deklarovane funkce, takze jsem inkludoval i je a uz to fungovalo

Avatar
Odpovedá na DarkCoder
Patrik Pastor:2.9.2019 12:32

nerozumim tomuto zapisu: *tmp++ = value % 10 + '0', value /= 10;
mohl bys to prosim vysvetlit? (je to z komentare, kde @coells dava implementaci funkce, ktera zapisuje textovy soubor velmi rychle)

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Patrik Pastor
DarkCoder:2.9.2019 14:53

Jedná se o úsek programu, ve kterém se převádí číslice čísla value do znakové podoby odzadu. Výraz value % 10 vrací poslední číslici čísla, přičtením k hodnotě '0' se získá její znakový ekvivalent. Výraz value /= 10 provádí "mazání" poslední číslice čísla, čímž se pro další iterakci cyklu vytváří prostor pro převod další číslice do znakové podoby.

Pro představu se podívej na následující úsek programu:

int value = 12345;

while (value > 0) {
        putchar(value % 10 + '0');
        value /= 10;
}

Na obrazovku se postupně budou vypisovat znaky do podoby: 54321.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Patrik Pastor:2.9.2019 17:24

dik uz chapu. Ale normalne by me to nenapadlo. Co mam precist/nastudovat abych takhle uvazoval?

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Patrik Pastor
DarkCoder:2.9.2019 17:34

Programovat, studovat cizí programy, naučit se cokoli analyzovat, optimalizovat a pochopit, umět ladit, přemýšlet na problémem a řešením, umět využít všechny možnosti programovacího jazyka, koncentrovat se...

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Patrik Pastor:2.9.2019 18:39

jeste jedna vec t = *tmp, *tmp-- = *dst, *dst++ = t; - jak to, ze muze napsat vse na jeden radek (tj bez semicolon) ale pouziva ciste carky mezi prikazy?

Avatar
DarkCoder
Člen
Avatar
Odpovedá na DarkCoder
DarkCoder:2.9.2019 19:58

Protože využívá operátoru čárka, který slouží ke zřetězení několika operací. Vysloveně říká překladači: "udělej tohle a tohle a tohle."

Nejčastěji to je vidět ve for cyklech v inicializační a inkrementační části při práci s vícero proměnnými.

for(i=0, j=0; i+j < val; i++, j++) …

V seznamu výrazů je jeho hodnota dána výrazem, který stojí nejvíce vpravo:

val = (i, 10, 100, 1000);

V předchozím příkladu bude mít proměnná val hodnotu 1000. Závorky jsou nutné z důvodu priorit operátorů (operátor čárka má nižší prioritu nežli přiřazovací operátor).

Editované
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Patrik Pastor:2.9.2019 20:44

Dobre ale pokud je dano vice promennych oddelenych carkou, musi byt prece nejak logicky svazany, napriklad

int x,y,z;

coz chapu - protoze vsechny promenne xyz maji stejny datovy typ int. Ale priklad
*tmp++ = value % 10 + '0', value /= 10; moc dobre nechapu, kdyz tady zadna logika mezi prikaze neni (nebo ji aspon nevidim - value je neco jineho nez *tmp). Pokud bych "retezil prikazy" potom bych prece nepouzival ';' stredniky vubec protoze bych vsechno nahazel na jeden radek a argumenty oddelil carkami (promenne bych treba deklaroval nahore v souboru, ale prikazy bych nabombil oddelneymi carkami). Jak to tedy ve skutecnosti je?

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Patrik Pastor
DarkCoder:2.9.2019 21:01

Řetězí se výrazy nikoli příkazy. Příkaz je výraz zakončený středníkem a tam už není co řetězit. Uskupení několika příkazů do jedné jednotky je blok příkazů, ale to už je mimo toto téma.

Ano, při deklaraci proměnných oddělených čárkou bývá obvykle vazba. Obvykle se takto vazbí proměnná a ukazatel na ni. Je ale úplně něco jiného deklarovat více proměnných stejného typu a řetězení výrazů.

Samozřejmě že tam je logika. V prvním výrazu získáváš znakovou podobu poslední číslice, v druhém příkazu tedy po provedení prvního příkazu se zbavuješ poslední číslice, čímž získáváš novou poslední číslici. Obě tyto operace jsou součástí jedna druhé, proto zde může být použit operátor čárka. Nic nebrání napsat obě operace samostatně, každou na samostatném řádku a oddělit středníkem. Že jsou ve výrazech odlišné typy, to je úplně jedno. Hlavní je smysl a vazba obou operací. Na mnoha místech "lze" místo středníku použít operátor čárku, ale takovéto používání operátoru čárka je považováno za velmi špatný formát zápisu.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Patrik Pastor:3.9.2019 15:17

jak presne funguje pointerova aritmetika zde:

int pozice = strstr(p_aktualni->jmeno, jmeno) - p_aktualni->jmeno;

rekneme kuprikladu:
aktualni.jmeno = Alena (5 bytu)
hledam:
jmeno = lena (4 byty)

potom podle rovnice:
jmeno -aktaulni.jmeno = 4-5

to je zaporne cislo (resp. adresa) - to by ale neproslo podminkou kde musi byt
pozice vetsi nez 0.

Pointerovou aritmetiku jsem si cetl, tam je ale posunovani o jednotlivych bajtech v retezcich (adresach bajtech). Jak je to ale mysleno tady?

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