

C++ - chyba scitani v cyklu
Ahoj! Tak se zase hlásím s novým problémem :D Píšu poměrně dlouhý program, potřebuji, abych převedl číslo s lomítkem na číslo bez něj. Chtěl jsem to udělat jednoduše stylem - poslední číslo * 10 na 0 + předposlední číslo * 10 na 1 atd. Problémje v tom, že v posledním kroku cyklu se mi nedopíše poslední číslo, ale hodnota proměnné součet se změní na nějaké záporné číslo. Netušíte co s tím? Moc díky
double j = 0; // pocitadlo pro mocneni 10-ky
for(int i = 10; i >= 0; --i){
if(i == 6){
continue; // vyjimka pro lomitko
}else if(cislo[i] < 48 || cislo[i] > 57){
cout << "Retezec neni rodnym cislem.2" << endl;
return 0; //osetreni, at jsou vstup jen cisla //konec 1. pozadavku
}
soucet += (cislo[i]-48)*pow(10, j);
++j;
}
Tušíme. Víš jaké největší číslo můžeš uložit do proměnné typu int?
A mimochodem, proč má počítadlo jako double?
Díky, už to mám, ten int prostě nestačil, překvapilo mě, že to na mě nebaflo error :D Double mám proto, že to vyžaduje pow, ten mocnitel nesmí být typu integer.
prekladac nemoze vediet ci na tvoje vypocty staci int alebo nie, tak ti nemoze ani blafnut error. Vseobecne pretecenie pri nasobeni alebo konverzii typov neni error, je to legitimna operacia vyuziva sa napr u nahodnych cisel, hashov, kryptovania, apod.
asi by si si mal pred akymkolvek programovanim najprv nastudovat jake obmedzenia ma jaky datovy typ, hlavne teda 32bitovy integer.
To co chces riesit sa zvycajne robi v stringu (da sa to na jeden riadok) a necpe sa to do ciselneho typu, a hlavne sa na to nepouziva fcia pow ktoru pouziva len zaciatocnik alebo debil (predpokladam ze ty si zaciatocnik :D)
Díky :D String načítám na vstupu, potom s hodnotami pracuju, jak mě napadne :D A už to jede, stačil "long long int" :D
P.s.: Začátečník jsem (doufám, že debil ne :D), ale proč nepoužívat pow? Ve škole nám o tom nic neříkali...
Protože v tohle případě by stačilo v každém průchodu vynásobit koeficient deseti a ne neustále počítat mocniny.
A je takové nepsané pravidlo, že pokud s něčím nepotřebuješ provádět matematické operace, tak to neukládej jako číslo, i když to číslo vlastně je.
lebo za prve pow rata plavajucou ciarkou (double) a teda u cisel ktore sa nevojdu do 52bit nastane chyba vypoctu, a za druhe je to v tomto pripade velmi neefektivne, co uz napisal kolega.