dokończenie kodu - wyznaczanie zbliżonej liczby

0

Witam,

Jestem początkującym programistą, pewnie dla niektórych problem będzie trywialny. Mam taki problem: Muszę stworzyć program, który będzie mi liczył średnią z 5 liczb a następnie pokaże liczbę z wprowadzonych liczb, liczbę najbardziej zbliżoną do średniej. Udało mi się dojść do średniej, oto kod:

**#include <iostream>
#include <math.h>

using namespace std;

int a,b,c,d,e,suma,srednia,m;
int main()
{
cout<<"Podaj 5 liczb"<<endl;
cin>>a>>b>>c>>d>>e;

suma=a+b+c+d+e;
cout<<"Suma to: "<<suma<<endl;

srednia=suma/5;
cout<<"Srednia to: "<<srednia<<endl;


return 0;**

I co teraz??? Jak wyznaczyć tą liczbę najbardziej zbliżoną??? Będę bardzo wdzięczny za pomoc.

1

W C/C++ istnieje dwa rodzaje dzielenia oba zapisywane znakiem '/'
Używasz dzielenia całkowitego.

2
  1. Taguj kod <code class="cpp">kod</code>
  2. Średnia pewnie ma być typu rzeczywistego, np double.
  3. "najbardziej zbliżona" może zostać wyświetlona za pomocą manipulatorów streamów, konkretnie setprecision i width: http://en.cppreference.com/w/cpp/io/manip
  4. ewentualnie "najbardziej zbliżona" może być wynikiem round(średnia), czyli zaokrągloną wartością.
  5. ale prawodpodobnie interpretacja @fourfour jest poprawna i chodzi o najbliższą spośród liczb wprowadzonych przez użytkownika.
0

Czyli co powinienem zmienić, co dopisać?

1

Policz różnice między swoimi liczbami a średnią. Najmniejsza różnica wskaże liczbę najbardziej zbliżoną do średniej.

0
Panicz74 napisał(a):

Czyli co powinienem zmienić, co dopisać?

Jeżeli to co napisano wyżej nie wystarcza do samodzielnego poprawienia kodu to zacznij od czytania jakiegoś kursu.

0

No właśnie jestem w trakcie takiego kursu. Moim zdaniem dobrze bo nauczyciel stawia na samodzielnie rozwiązywanie problemów. Trochę się zaciąłem więc chciałem się zapytać specjalistów. Wasza pomoc jest nieceniona bo faktycznie teraz mam pomysł jak to zrobić. Stworzyłem taki kod ale czegoś tutaj brakuje bo nie wyświetla mi tej liczby. Czego tu jeszcze może brakować?

#include <iostream>
#include <math.h>
#include <cstdio>

using namespace std;

int a,b,c,d,e,suma,srednia,roznica_a,roznica_b,roznica_c,roznica_d,roznica_e;


int main()
 {
 	cout<<"Podaj 5 liczb"<<endl;
 	cin>>a>>b>>c>>d>>e;
 	
 	suma=a+b+c+d+e;
 	cout<<"Suma to: "<<suma<<endl;
 	
 	srednia=suma/5;
 	cout<<"Srednia to: "<<srednia<<endl;
 	
 	roznica_a=srednia-a;
 	cout<<"Roznica a:"<<roznica_a<<endl;
 	
 	roznica_b=srednia-b;
 	cout<<"Roznica b:"<<roznica_b<<endl;
 	
 	roznica_c=srednia-c;
 	cout<<"Roznica c:"<<roznica_c<<endl;
 	
 	roznica_d=srednia-d;
 	cout<<"Roznica d:"<<roznica_d<<endl;
 	
 	roznica_e=srednia-e;
 	cout<<"Roznica e:"<<roznica_e<<endl;
 	
 	if ((roznica_a<roznica_b )&&(roznica_a<roznica_c)&&(roznica_a<roznica_d)&&(roznica_a<roznica_e)&&(roznica_a>=0))
 	{
 		cout<<"Najbardziej zblizona liczba do sredniej to:"<<a<<endl;
 	}
 	else if  ((roznica_b<roznica_a )&&(roznica_b<roznica_c)&&(roznica_b<roznica_d)&&(roznica_b<roznica_e)&&(roznica_b>=0))
 	{
 		cout<<"Najbardziej zblizona liczba do sredniej to:"<<b<<endl;
 	}
	else if  ((roznica_c<roznica_a )&&(roznica_c<roznica_b)&&(roznica_c<roznica_d)&&(roznica_c<roznica_e)&&(roznica_c>=0))
 	{
 		cout<<"Najbardziej zblizona liczba do sredniej to:"<<c<<endl;
 	}
 	else if  ((roznica_d<roznica_a )&&(roznica_d<roznica_b)&&(roznica_d<roznica_c)&&(roznica_d<roznica_e)&&(roznica_d>=0))
 	{
 		cout<<"Najbardziej zblizona liczba do sredniej to:"<<d<<endl;
 	}
 	else if  ((roznica_e<roznica_a )&&(roznica_e<roznica_b)&&(roznica_e<roznica_c)&&(roznica_e<roznica_d)&&(roznica_e>=0))
 	{
 		cout<<"Najbardziej zblizona liczba do sredniej to:"<<c<<endl;
 	}
 	
 	
	return 0;
}
2
     if ((roznica_a<roznica_b )&&(roznica_a<roznica_c)&&(roznica_a<roznica_d)&&(roznica_a<roznica_e)&&(roznica_a>=0))
     {
         cout<<"Najbardziej zblizona liczba do sredniej to:"<<a<<endl;
     }
     else if  ((roznica_b<roznica_a )&&(roznica_b<roznica_c)&&(roznica_b<roznica_d)&&(roznica_b<roznica_e)&&(roznica_b>=0))
     {
         cout<<"Najbardziej zblizona liczba do sredniej to:"<<b<<endl;
     }
    else if  ((roznica_c<roznica_a )&&(roznica_c<roznica_b)&&(roznica_c<roznica_d)&&(roznica_c<roznica_e)&&(roznica_c>=0))
     {
         cout<<"Najbardziej zblizona liczba do sredniej to:"<<c<<endl;
     }
     else if  ((roznica_d<roznica_a )&&(roznica_d<roznica_b)&&(roznica_d<roznica_c)&&(roznica_d<roznica_e)&&(roznica_d>=0))
     {
         cout<<"Najbardziej zblizona liczba do sredniej to:"<<d<<endl;
     }
     else if  ((roznica_e<roznica_a )&&(roznica_e<roznica_b)&&(roznica_e<roznica_c)&&(roznica_e<roznica_d)&&(roznica_e>=0))
     {
         cout<<"Najbardziej zblizona liczba do sredniej to:"<<c<<endl;
     }

Ok, teraz zamiast dla pięciu zmiennych zrób to dla tysiąca.

Dodatkowo (a może nawet "przede wszystkim") to jest źle. Liczba mniejsza od średniej np. o 3 będzie wg Ciebie bliższa sredniej niż liczba jej równa (ponieważ a-3 < a). Odrzucasz liczby mniejsze od średniej, nawet jeśli są bliższe średniej od tych od niej większych. Powinieneś do sprawdzania odległości używać wartości bezwzględnych (std::abs).

Średnią licz jako zmiennoprzecinkową, inaczej Twoje wyniki będą bardzo niedokładne. Np 17/6 da wynik 2 - chyba nie tego się spodziewałeś?

1
  1. Użyj pętli
  2. Nie używaj zmiennych globalnych - to źródło dużej ilości błędów
  3. Użyj zmienne: int i,value,sum; double avg,min_difference,tmp_difference; i więcej żadnych innych.
0

@Panicz74 a teraz przerób ten kod tak żeby można było podać 100 liczb. Albo 1000 liczb. Albo N liczb. Problem? No właśnie. To skasuj i napisz od nowa, tym razem z głową.

0

Przepraszam was za moją niekompetencję ale dopiero się uczę i raczej szukam pomocy. Wiem, że mój kod jest daleki od ideału, dlatego miałem nadzieję, że nasuniecie mi parę pomysłów.

Jak coś wykombinuję to od razu podeślę :)

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