Diskuze: Lichá čísla jsou 10x větší, než by měli být

C++ C a C++ Lichá čísla jsou 10x větší, než by měli být

Avatar
Josef Vondra
Člen
Avatar
Josef Vondra:

#include <stdio.h>

int main()

{
int a;
float cisla;
int pocetcisel;
int pocetkladnych;
int pocetzapornych;
float procentokladnych;
float procentozapornych;
int pocetsudych;
int pocetlichych;
float procentosudych;
float procentolichych;
double prumer;
int soucetcisel;
int min;
int max;

pocetcisel = 0;
pocetkladnych = 0;
pocetzapornych = 0;
cisla = 0;
min = 10001;
max = -10001;

while (scanf("%i",&a)==1)
{
if (a < -10000 || a > 10000)
{
printf("\nError: Vstup je mimo interval!");
return 100;
}
else

if (pocetcisel!=0)
printf(", ");

printf("%d",a);

pocetcisel++;

if (a > 0)
pocetkladnych++;
if (a < 0)
pocetzapornych++;
if ((a % 2) == 0)
pocetsudych++;
if ((a % 2) != 0)
pocetlichych++;
if (max < a)
max = a;
if (min > a)
min = a;

soucetcisel = (double)cisla + (double)a;
cisla = soucetcisel;

}

procentokladnych = (((int)pocetklad­nych / (double)pocet­cisel)*100);
procentozapornych = (((int)pocetza­pornych / (double)pocet­cisel)*100);
procentosudych = (((int)pocetsudych / (float)pocetci­sel)*100);
procentolichych = (((int)pocetlichych / (float)pocetci­sel)*100);
prumer = ((double)soucet­cisel / (int)pocetcisel);

printf("\nPocet cisel: %d",pocetcisel);
printf("\nPocet kladnych: %d",pocetkladnych);
printf("\nPocet zapornych: %d",pocetzapor­nych);
printf("\nProcento kladnych: %0.2f", procentokladnych);
printf("\nProcento zapornych: %0.2f", procentozapornych);
printf("\nPocet sudych: %d", pocetsudych);
printf("\nPocet lichych: %d", pocetlichych);
printf("\nProcento sudych: %0.2f", procentosudych);
printf("\nProcento lichych: %0.2f", procentolichych);
printf("\nPrumer: %0.2f", prumer);
printf("\nMaximum: %d", max);
printf("\nMinimum: %d", min);

return 0;
}

Ahojky, udělal jsem tento kód, všechno funguje atd, ale když tam zadám třeba 3 lichá čísla, tak na výstupu mi to vypíše, že jich je 30. Nevíte někdo prosím, proč to dělá? :)

 
Odpovědět 20. října 13:28
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Josef Vondra
Martin Dráb:

Ahoj,

proměnnou pocetlichych (stejně jako další), zdá se, nikde neinicializuješ. Jedná se o lokální proměnnou, takže se ti o to překladač nepostará. Problém by mělo vyřešit její nastavení na nulu při deklaraci (podobně u ostatních).

Kód, co jsi jsem dal, je špatně čitelný. Příště prosím použij značky [ c o d e] a [ / c o d e] (bez mezer), aby vypadal více k světu.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 20. října 13:38
2 + 2 = 5 for extremely large values of 2
Avatar
Josef Vondra
Člen
Avatar
Josef Vondra:

Ahojky, děkuji za odpověd, jdu to zkusit a děkuji za radu pro příště. :)

 
Nahoru Odpovědět 20. října 13:49
Avatar
Josef Vondra
Člen
Avatar
Josef Vondra:

Ano, problém to vyřešilo, děkuji za pomoc. :)

 
Nahoru Odpovědět 20. října 13:51
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.