float a[4],sr,najb,najm[4];
1. a oraz najm to tablice od 0 do 3. W programie korzystasz z tablic 5 elementowych( od 0 do 4 )
2. Według mnie bardzo mylące jest pisanie tak warunków w pętli:
for (int i=0;i<=4;i++)
chodzi mi o i<=4 polecam jednak pisać i<5 wtedy jest trudniej się pomylić :D
3. Tą serie ifów co masz mógłbyś zastąpić pętlą i funkcją fabs
for( int i = 0; i < 5; i++ )
{
najm[i] = fabs(a[i] - sr);
}
Dużo czytelniejsze :)
4.
najb=a[0];
for (int i=1;i<=4;i++)
{
if (najb>najm[i])najb=a[i];
}
Z tym for`em masz mały problem. Sprawdzasz okej, aczkolwiek nie przewidujesz sytuacji, kiedy w Twojej tablicy będzie liczba , która jest też średnią. Dlatego przed tym ifem dodałbym małe sprawdzenie:
if ( najm[i] == 0 )
{
najblizej=a[i];
break;
}
Teraz w sytuacji np. 1,2,3,4,5, gdzie średnia jest 3 to trójka zawsze będzie najbliżej średniej i jej różnica do średniej jest 0. Chociaż ten dodatek może czasami zmniejszyć a czasami zwiększyć czas działania programu.
Kolejna sprawa:
if (najb>najm[i])najb=a[i];
Przypisujesz najb do a[i] a potem to sprawdzasz zupełnie z inną tablicą... Coś tu jest nie tak.
Proponuje moje rozwiązanie:
najb = najm[0];
float najblizej = a[0];
for (int i=1;i<5;i++)
{
if ( najm[i] == 0 )
{
najblizej=a[i];
break;
}
if ( najb>najm[i])
{
najb = najm[i];
najblizej=a[i];
}
}
cout << "Liczba najblizej sredniej to "<<najblizej<<endl;
Jak widzisz dodałem jeszcze jedną zmienną najblizej, dzięki której najb może niezależnie sprawdzać kolejne elementy tablicy najm.