Program obliczajacy srednia liczb parzystych, komenda while.

0

Witam, ponownie zadam moje pewnie błahe pytanie tym razem co do komendy while,
otóż uczę sie programowania z http://cpp.jcom.pl/lekcja6.php i za zadanie mam między innymi
"Napisz program pobierający liczby z klawiatury (zero kończy wpis) i obliczający średnią liczb parzystych."

#include <iostream>
#include <conio.h>
using namespace std;

int main()

{
	cout<<"Program obliczajacy srednia liczb parzystych"<<endl;
	cout<<"Podaj liczbe(zero konczy wpis) "<<endl;
	int n ,liczba;
	cin>>liczba;
	float wynik; 
	while(liczba%2==0 && liczba!=0)
	{
		cout<<"podaj liczbe"<<endl;
		cin>>liczba;
		n++;
		wynik=wynik+liczba/n;
	}
	cout<<"srednia wynosi "<<wynik<<""<<endl;
	getch();
}

Prosze o objaśnienie o robię źle.
Próbowałem już zmienic zmienną wyniku z float na int, podstawić na początku pod wynik 0, zmienic z wynik=wynik+liczba/n; na wynik==liczba/n; i kilka innych.

3

1.Pętla do..while byłaby adekwatniejsza w tym wypadku.
2.Wynik średniej powinien być liczony po wczytaniu wszystkich liczb, pod sam koniec: wynik = (float)liczba/n;
3.Nazwa zmiennej n nie mówi wiele - nazwanie jej ilosc_liczb byłoby lepsze.
4.Nigdzie nie ustawiasz n żadnej wartości - a na początku powinna być równa 0.

0

Masz czytać wszystkie liczby ale do sumy dodawac tylko parzyste.

0

zmienilem trochu kod i dalej jest problem srednią liczy mi 0

#include <iostream>
#include <conio.h>
using namespace std;

int main()

{
	float wynik; 
	int liczba;
	cout<<"Program obliczajacy srednia liczb parzystych"<<endl;
	cout<<"Podaj liczbe(zero konczy wpis) "<<endl;
	int n=0;
	cin>>liczba;
	do
	{
		cout<<"podaj liczbe"<<endl;
		cin>>liczba;
		n++;
	}while(liczba%2==0 && liczba!=0);
	wynik=liczba/n;
	cout<<"srednia wynosi "<<wynik<<""<<endl;
	getch();
	
}

próbowałem zmienić rodzaj zmiennej liczby z int na float ale wtedy wyskakiwał mi blad

invalid operands of types 'float' and 'int' to binary 'operator%'

wynik=liczba/n;

próbowałem umieścić to tez na koncu petli do.

0

1.wynik=(float)liczba/n;
2.Sumować masz jedynie liczby parzyste, a Twój program po napotkaniu liczby parzystej przestanie wczytywać dane.
3.Po co to cin>>liczba; przed pętlą?
4.Nigdzie nie sumujesz niczego, więc jak zamierzasz policzyć średnią?

0

1.yhm czyli ma być (float) w kodzie tak? myślałem ze mam zmienic zmienna int liczba; na float liczba,co to robi?
2.hmm czyli zamiastliczba%2==0 mam dac liczba%2!=0 ?
3.przeoczenie
4.wynik=wynik+liczba a na koncu wynik=wynik/n?

1

1.Jeżeli zmienisz liczba na float, nie będziesz mógł użyć operatora %.
Przecież podałem co masz napisać: wynik=(float)liczba/n;, przy czym wynik to float, a liczba oraz nint-ami - to float w nawiasie oznacza rzutowanie.
2.Programowanie przez permutacje jest złe - pomyśl!
Program ma sumować liczby parzyste, a pod koniec podzielić tę sumę przez ilość tych liczb - to będzie średnia arytmetyczna.
4.Poddaję się:

#include <iostream>
using namespace std;
 
int main()
{
  float wynik = 0; 
  int liczba;
  unsigned int n=0;

  cout<<"Program obliczajacy srednia liczb parzystych"<<endl;
  cout<<"Podaj liczby (zero konczy wpisywanie):"<<endl;

  while (true)
  {
    cin>>liczba;

    if (liczba == 0)
      break;

    if (liczba%2 == 0)
      n++, wynik += liczba;
  }

  if (n == 0)
    cout << "Nie podales odpowiednich liczb!"; else
  {
    wynik /= n;
    cout << "Srednia wynosi: " << wynik;
  }
  return 0;
}

Pisane z palca, ale powinno działać...

0
 #include <iostream>
#include <conio.h>
using namespace std;
int main()
{
	float srednia, suma=0;
	int ilosc_liczb=0; 
	int liczba;
	
	cout<<"program obliczajacy srednia liczb parzystych (0 – konczy wpis): "<<endl;
	do
	{
  		cout<<"Podaj liczbe: ";
		cin>>liczba;
		if (liczba%2!=0 && liczba!=0) // jesli liczba jest nieparzysta
		{
			cout<<"Podaj liczbe: ";
			cin>>liczba;
		}
		if (liczba!=0) //jesli liczba jest jakakolwiek liczba parzysta
		{
			suma=suma+liczba;
			ilosc_liczb++;
		}
	}	
	while(liczba!=0);
	srednia=suma/ilosc_liczb;
	cout<<"Srednia: "<<srednia;
	getch();
	return 0;
}

Jest to rozpisane bardziej po chłopsku, dla nowych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1