Zadejte hledaný výraz...

Progm jazyk C, chyba v cyklu

Tomáš
verified
rating uzivatele
14. 10. 2013 22:16:57
Dobrý večer, mohli byste mi poradit jak odstranit zacyklení dvou cyklů while? Už si fakt nevím rady a je to poslední co mi zbývá vyladit.
#include
#include
#include
int main(void)
{
int napsanacisla;
int aktualnicislo=0;
int sumacisel=0;
float prumercisel=0;
int maximum = INT_MIN;
int minimum = INT_MAX;
int cifernecislo=0;
int nactenocislomax=0;
int nactenocislomin=0;
printf("Zdravim uzivatelinProgram pocita sumu, prumer, max, min atd.. cisel.nn");
do{
printf("Zadejte cela cisla - kladna i zaporna, konec nacitani cislic nulou: ");
scanf("%d",&napsanacisla);
sumacisel += napsanacisla;
prumercisel = sumacisel / (float)aktualnicislo;
if(napsanacisla > maximum){
maximum = napsanacisla;
nactenocislomax=1;
}
else if (napsanacisla == maximum){
nactenocislomax++;
}
if(napsanacisla < minimum){
minimum = napsanacisla;
nactenocislomin=1;
}
else if (napsanacisla == minimum){
nactenocislomin++;
}
while(napsanacisla > 0){
cifernecislo += napsanacisla % 10; /*<<-- tu mi to habruje a ukazuje stale nulu a nebo jen jedno
cislo coz je spatne*/
napsanacisla /= 10;
}
}while(napsanacisla!=0 && ++aktualnicislo);
printf("n---> nacteno bylo celkem cisel: %d", aktualnicislo);
printf("n---> suma cisel je: %d", sumacisel);
printf("n---> prumerna hodnota cisel je: %f", prumercisel);
if(maximum!=0)
printf("n---> maximum je %d, bylo nacteno %dx",maximum,nactenocislomax);
else
printf("n---> maximum: NAN nebylo nacteno");
if(minimum!=0)
printf("n---> minimum je %d, bylo nacteno %dx",minimum,nactenocislomin);
else
printf("n---> minimum: NAN nebylo nacteno");
printf("n---> soucet cifernych cisel je: %dn", cifernecislo);
return 0;
}
Všechno jde kromě zjištění ciferného součtu, protože tam je podmínka čislo > 0 a nevím jak to udělat jinak ...¨
Děkuji za každou radu.
14. 10. 2013 22:16:57
https://webtrh.cz/diskuse/progm-jazyk-c-chyba-v-cyklu#reply955758
Crusty
verified
rating uzivatele
(2 hodnocení)
14. 10. 2013 22:42:15
nedelis na zacatku nulou?
promena aktualnicislo je inicializovana na 0 a pak s ni delis.
14. 10. 2013 22:42:15
https://webtrh.cz/diskuse/progm-jazyk-c-chyba-v-cyklu#reply955757
Tomáš
verified
rating uzivatele
14. 10. 2013 23:01:37
Napsal Crusty;1009991
nedelis na zacatku nulou?
promena aktualnicislo je inicializovana na 0 a pak s ni delis.
Tam je cifernecislo += napsanecislo % 10; => 0 + N = člen děleno 10 ... nedělím tou nulou, ta tam je nastavena, aby si nevzal program jiné divné číslo
14. 10. 2013 23:01:37
https://webtrh.cz/diskuse/progm-jazyk-c-chyba-v-cyklu#reply955756
Jan Stejskal
verified
rating uzivatele
(7 hodnocení)
14. 10. 2013 23:10:33
prumercisel = sumacisel / (float)aktualnicislo;
Tady se nulou nedělí?
while(napsanacisla > 0){
V proměnné napsanacisla je jen jedno číslo, tedy více jak jeden výsledek z toho nevypadne.
14. 10. 2013 23:10:33
https://webtrh.cz/diskuse/progm-jazyk-c-chyba-v-cyklu#reply955755
Crusty
verified
rating uzivatele
(2 hodnocení)
14. 10. 2013 23:14:16
takhle by to melo fungovat. Tvuj vnoreny while nahrad timto
14. 10. 2013 23:14:16
https://webtrh.cz/diskuse/progm-jazyk-c-chyba-v-cyklu#reply955754
Tomáš
verified
rating uzivatele
14. 10. 2013 23:20:16
Napsal Crusty;1010006
takhle by to melo fungovat. Tvuj vnoreny while nahrad timto
Toto mi už funguje, ale nechápu, jak jsi k tomu přišel.
Díky moc --- díky bohu, už nemusím vymýšlet různé kličky.
14. 10. 2013 23:20:16
https://webtrh.cz/diskuse/progm-jazyk-c-chyba-v-cyklu#reply955753
Crusty
verified
rating uzivatele
(2 hodnocení)
14. 10. 2013 23:23:49
to vis, leta praxe a odrikani :)
promenou napsanacisla testujes na nulu v tom vnejsim while cyklu, ale v tom vnitrnim jsi si ji vynuloval, pri tom prepocitavani. Proto je tam tempNapsaneCislo.
vlasne ten vnitrni while staci jen takto: (jak jsi to mel)
14. 10. 2013 23:23:49
https://webtrh.cz/diskuse/progm-jazyk-c-chyba-v-cyklu#reply955752
Tomáš
verified
rating uzivatele
14. 10. 2013 23:27:51
Takže to tempNapsaneCislo je nějaká mezní hodnota, kde se uchovají data před vymazáním? Tohle nás myslím nijak neučili, nebo jsem chyběl...
Ale jinak díky moc, ušetřil si mi min. další dvě noci probděné.
14. 10. 2013 23:27:51
https://webtrh.cz/diskuse/progm-jazyk-c-chyba-v-cyklu#reply955751
Crusty
verified
rating uzivatele
(2 hodnocení)
14. 10. 2013 23:29:52
ale prd mezni, jen docasna promena, kde si ulozis hodnotu prave zadaneho/zpracovavaneho cisla jelikoz to pak delis deseti, ale na konci testujes nulu, ale nulu na vstupu, ne z toho souctu cifer.
Kapisto?
temp = temporary, docasny
14. 10. 2013 23:29:52
https://webtrh.cz/diskuse/progm-jazyk-c-chyba-v-cyklu#reply955750
Tomáš
verified
rating uzivatele
14. 10. 2013 23:31:45
Napsal Crusty;1010012
ale prd mezni, jen docasna promena, kde si ulozis hodnotu prave zadaneho/zpracovavaneho cisla.
temp = temporary, docasny
Já to tak myslel, jen jsem se zle vyjádřil a chápu :). UŽ
Ještě raz díky.
14. 10. 2013 23:31:45
https://webtrh.cz/diskuse/progm-jazyk-c-chyba-v-cyklu#reply955749
Pro odpověď se přihlašte.
Přihlásit