[C++] Średnia arytmetyczna liczb nieujemnych

anilahcim
Użytkownik
Użytkownik
Posty: 209
Rejestracja: 13 lip 2012, o 14:32
Płeć: Kobieta
Lokalizacja: Pcim
Podziękował: 107 razy

[C++] Średnia arytmetyczna liczb nieujemnych

Post autor: anilahcim »

Mam problem w rozwiązaniu zadania:

Wczytuj kolejne liczby całkowite z klawiatury. Zakończ wczytywanie gdy użytkownik wprowadzi liczbę ujemną. Wypisz na ekran średnią arytmetyczną wszystkich wprowadzonych liczb nieujemnych.

To jest moje rozwiązanie:

Kod: Zaznacz cały

#include <iostream>
using namespace std;

int main()
{
	int x, suma, ilosc;
	double srednia;
	ilosc = 0;
	suma = 0;

	do
	{
		cout<< "Wpisz liczbe calkowita: " << endl;
		cin>> x;
		if (x>=0)
			suma += x;
			ilosc++;
			srednia=suma/ilosc;
	}
	while (x>=0);
		cout<< "Srednia arytmetyczna liczb nieujemnych: " << srednia << endl;

system("pause");
return 0;
}
Wynik wychodzi mi zły i nie wiem gdzie jest błąd. Nie widzę też różnicy w kolejności 16 i 17 wiersza (suma i ilość), a jeśli zamienię je ze sobą dostaję różne wyniki. Na przykład, w powyższej wersji, jeśli wpisuję liczby: 10, 5, 5, 20, -10 otrzymuję wynik 8. Jeśli zamienię wiersz 16 i 17, wynik jest 7.

Proszę o pomoc i z góry dziękuję.
Ostatnio zmieniony 27 paź 2012, o 16:48 przez Afish, łącznie zmieniany 2 razy.
Powód: Kod umieszczaj w otoczeniu [code]
lemoid
Użytkownik
Użytkownik
Posty: 199
Rejestracja: 24 maja 2012, o 23:36
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 5 razy
Pomógł: 30 razy

[C++] Średnia arytmetyczna liczb nieujemnych

Post autor: lemoid »

porównaj do siebie te kody

Kod: Zaznacz cały

#include <iostream>
using namespace std;
 
int main() {
double suma=0.0, ilosc=0.0;
double x, srednia=0.0;
 
while (cin>>x && x>=0)
{
ilosc++;
suma+=x;
 
}
srednia=suma/ilosc;
cout << srednia << endl;
}
anilahcim
Użytkownik
Użytkownik
Posty: 209
Rejestracja: 13 lip 2012, o 14:32
Płeć: Kobieta
Lokalizacja: Pcim
Podziękował: 107 razy

[C++] Średnia arytmetyczna liczb nieujemnych

Post autor: anilahcim »

Dzięki za odpowiedź. A dlaczego funkcja do...while tu nie pasuje? W Twoim kodzie rzeczywiście wynik wychodzi poprawnie (chociaż dalej nie rozumiem, na czym polega błąd u mnie), ale gdzie wstawić "cout<< "Wpisz liczbe calkowita: " << endl;"? Jeśli wstawię przed pętlą, to pojawi się tylko raz, jeśli w pętli albo po niej, to najpierw trzeba wpisać liczbę z klawiatury, a dopiero potem pokazuje się komunikat, żeby wpisać liczbę.
knrdk
Użytkownik
Użytkownik
Posty: 36
Rejestracja: 12 mar 2009, o 13:54
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 5 razy
Pomógł: 7 razy

[C++] Średnia arytmetyczna liczb nieujemnych

Post autor: knrdk »

W swoim kodzie zapomniałaś (?) o nawiasach klamrowych po IF.
anilahcim
Użytkownik
Użytkownik
Posty: 209
Rejestracja: 13 lip 2012, o 14:32
Płeć: Kobieta
Lokalizacja: Pcim
Podziękował: 107 razy

[C++] Średnia arytmetyczna liczb nieujemnych

Post autor: anilahcim »

No tak Dzięki!
royas
Użytkownik
Użytkownik
Posty: 363
Rejestracja: 24 sie 2012, o 09:27
Płeć: Mężczyzna
Lokalizacja: Cieszyn
Pomógł: 80 razy

[C++] Średnia arytmetyczna liczb nieujemnych

Post autor: royas »

Jeszcze jedna ważna rzecz: jeśli suma i ilość jest intem to ich dzielenie również da inta, czyli nawet jeśli średnia jest doublem, otrzymamy wynik zaokrąglony do liczby całkowietej.
ODPOWIEDZ