Witam,
ostatnio zabrałem się na napisanie programu z 'pracy domowej' z kursu p. Zelenta (LINK). Trafiłem na barierę jaką jest rozpatrzenie takiego przypadku, w którym istnieją dwie różne najbliższe średniej liczby, np. średnia = 5, x = 6.5, y=3.5. Zauważyłem, że wtedy zawsze jedna liczba jest większa od średniej, a druga - mniejsza i chciałem z tego skorzystać. Program poniżej.
#include <iostream>
using namespace std;
float liczba[5], suma, srednia, n, roznica[5], najblizszaw, najblizszam;
int w[5], m[5];
int main()
{
for(int i=0; i<5; i++)
{
cout << "Podaj "<<i+1<<" liczbe: ";
cin >> liczba[i];
suma+=liczba[i];
}
srednia=suma/5;
cout << "Srednia podanych liczb wynosi: "<<srednia;
for(int i=0; i<5; i++)
{
if(liczba[i]>=srednia) {roznica[i]=liczba[i]-srednia, w[i]=1, m[i]=0;}
else if(liczba[i]<=srednia) {roznica[i]=srednia-liczba[i]; w[i]=0; m[i]=1;}
}
n=roznica[0];
for(int i=1; i<=5; i++)
{
if((w[i]==1)&&(n>=roznica[i])) {n=roznica[i]; najblizszaw=liczba[i];}
else if((m[i]==1)&&(n>=roznica[i])) {n=roznica[i]; najblizszam=liczba[i];}
}
cout << endl << najblizszaw;
cout << endl << najblizszam;
return 0;
}
najblizszaw - liczba najbliższa średniej, która jest od niej większa, najblizszam - która jest od niej mniejsza. Tablice w[5] i m[0] przechowują 1 i 0 informujące, czy liczba jest większa lub mniejsza od średniej (ustawiane jest to w pierwszej pętli for). Program niestety za każdym razem podaje jedną najbliższą średniej liczbę. Dla zestawu 6.5., 3.5., 0, 15, 0 podaje kolejno liczby 0 i 3.5 (3.5. jest mniejsza od średniej 5 i jest wyświetlana jako druga z kolejności, co by się z programem zgadzało).
Macie jakieś łatwiejsze pomysły od mojego, bądź wiecie, jak zmienić moje warunki tak, aby było dobrze? Nie mam już pomysłów, siedziałem nad tym już z parę godzin i się poddaję.