Diskuze: Chyba v kóde... ako ju opraviť(začiatočník)
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 8 zpráv z 8.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Ty centy ještě zaokrouhli a problém zmizí.
Ta nepřesnost vzniká při převodu čísla do dvojkové soustavy (float
dokonce jako mocnina dvojky), ve které si PC čísla ukládá.
Určite je to to správne riešenie, lenže som hodne nový. Učím sa to iba v škole a toto sme dostali za úlohu. Ak by si bol taký dobrý napísal by si mi ako by som mal upraviť ten kód?
Neviem čo si spravil, ale myslím, že sa mýliš.
Luboš ti písal o zaokrúhľovaní.
Tvoj príklad by mohol vyzerať nejak takto:
#include <stdio.h>
#include <math.h> // pre funkcie floor() - zaokrúhlenie nadol, ceil() - zaokrúhlenie nahor
int main(int argc, char *argv[])
{
float suma, pom;
int centy;
int cele;
printf("Zadaj sumu a ja ti ju napisem a zaroven aj vysklonujem:\n");
scanf("%f", &suma);
pom = (suma - floor(suma)) * 100; // vypocet centov je typ float
printf("\nTestovaci vypis mnozstva centov pred zaokruhlenim: %f\n", pom); // nie je to cele cislo
if (pom > floor(pom) && pom < (floor(pom) + 0.5)) // podmienka na zaokruhlenie nadol
pom = floor(pom); // zaokruhlenie nadol
else
pom = ceil(pom); // zaokruhlenie nahor
printf("\nTestovaci vypis mnozstva centov po zaokruhleni: %f\n\n", pom); // uz je to spravne
centy = (int)pom;
switch ((int)suma) {
case 1:
printf("%d euro", (int)suma);
break;
case 2 ... 4:
printf("%d eura", (int)suma);
break;
default:
printf("%d eur", (int)suma);
break;
}
switch (centy) {
case 1:
printf(" a %d cent\n", centy);
break;
case 2 ... 4:
printf(" a %d centy\n", centy);
break;
default:
printf(" a %d centov\n", centy);
break;
}
return 0;
}
Zaokrúhľovanie nahor a nadol som ti ukázal pre ilustráciu.
Najlepšie bude použiť funkciu round(), tá zaokrúhľuje matematicky, teda
> 0.5 nadol a > 0.5 nahor.
Použitie:
pom = (suma - floor(suma)) * 100; // vypocet centov je typ float
centy = (int)round(pom);
Aha... zaokruhľovanie je trocha ďalej ako moje doterajšie znalosti ale pri printf som dal iba %.f a kód je teraz takto:
#include <stdio.h>
int main(int argc, const char * argv[]) {
float suma;
float centy;
int cele;
printf("Zadaj sumu a ja ti ju napisem a zaroven aj vysklonujem:\n");
scanf("%f",&suma);
cele=(int)suma;
centy= (suma-cele)*100;
switch ((int)suma) {
case 1:
printf("%d euro",(int)suma);
break;
case 2 ... 4:
printf("%d eura",(int)suma);
break;
default:
printf("%d eur",(int)suma);
break;
}
switch ((int)centy) {
case 1:
printf(" a %.f cent\n",centy);
break;
case 2 ... 4:
printf(" a %.f centy\n",centy);
break;
default:
printf(" a %.f centov\n",centy);
break;
}
return 0;
}
Zobrazeno 8 zpráv z 8.