Witam. Przerabiam sobie kurs c++ na yt u pana Zelenta i natrafiłem na pewien problem z zadaniem.
Mam utworzyć program który wyświetli z podanych liczb tą która jest najbliżej średniej.
Tworzę go dla dowolnej ilości liczb podawanych przez użytkownika.
Problem polega na tym:
Jeśli podana przeze mnie liczba (której róznica ze srednią to "minimum") jest mniejsza od średniej to wychodzi mi głupota.
Z góry dzięki za wskazówki.
To kod:
#include <iostream>
#include <iomanip>
using namespace std;
float srednia(float *tablica,int ile);
int main()
{
//Deklaracja zmiennych pomocniczych.
int ile;
float minimum;
cout<<"Podaj ile liczb w tablicy: ";
cin>>ile;
//Deklaracja tablic.
float *tab;
tab= new float[ile];
float *tab2;
tab2= new float[ile];
//Wypełnianie tablicy "tab"
for(int i=0;i<ile;i++)
{
cout<<"Podaj liczbe: ";
cin>>tab[i];
}
//Wypisanie sredniej
cout<<setprecision(5);
cout<<"Srednia wynosi: "<<srednia(tab,ile)<<endl;
/*
Obliczanie róznicy pomiędzy średnią
a wprowadzoną zmienną a następnie zamiana
ewentualnej ujemnej różnicy na wartość dodatnią
*/
for(int i=0;i<ile;i++)
{
tab2[i]=tab[i]-srednia(tab,ile);
if(tab2[i]<0)
{
tab2[i]=tab2[i]*(-1);
}
cout<<tab2[i]<<endl;
}
//Szukanie najmniejszej różnicy
minimum=tab2[0];
for(int i=0;i<ile;i++)
{
if(minimum>tab2[i])
minimum=tab2[i];
}
//Wypisanie wyników
cout<<setprecision(5);
if(srednia(tab,ile)<0)
cout<<"Najblizej sredniej: "<<(minimum-srednia(tab,ile))*(-1)<<endl;
else
cout<<"Najblizej sredniej: "<<minimum+srednia(tab,ile)<<endl;
system("pause");
delete [] tab;
delete [] tab2;
return 0;
}
// Funkcja obliczająca średnią z podanych wartości
float srednia(float *tablica,int ile)
{
float suma=0;
for(int i=0;i<ile;i++)
{
suma+=*tablica;
tablica++;
}
return suma/ile;
}