Cześć!
Napisałem program wskazujący wśród podanych 5 liczb tę, która jest najbliższa średniej z tych liczb. Ogólnie program działa prawidłowo na przypadkach wskazanych w kursie C++, chciałbym jednak się dowiedzieć, czy można go jeszcze jakoś zoptymalizować, lub czy wręcz nie popełniłem gdzieś czegoś bardzo karkołomnego? Pozwolę sobie chyłkiem zaznaczyć, że jestem w połowie kursu konsolowego, przez co proszę o dostosowanie rad w miarę możliwości ;)
Idea działania programu jest taka:
1. Wprowadzam liczby do tablicy za pomocą pętli, od razu robiąc ich sumę, aby później wyliczyć z niej średnią.
2. Do drugiego rzędu tablicy wprowadzam wartości bezwzględne różnicy pomiędzy podaną liczbą, a średnią. Popularnie mówiąc, wpisuję sobie w drugim rzędzie "moduły", aby na ich podstawie poznać która liczba jest najbliżej średniej - ta z najniższym modułem.
3. Ponieważ mogą wystąpić maksymalnie dwie liczby różne od siebie, które są tak samo blisko średniej, do wypisania wyników tworzę tablicę dwukomórkową.
4. Pętlą sprawdzam, która liczba ma najniższy moduł. Jednocześnie przy wystąpieniu takiego samego modułu sprawdzam, czy liczba jest taka sama czy różna - dla różnych liczb zapełniam obie komórki tablicy z wynikami. Tworzę pomocniczą zmienną "int podwojny" na zasadzie wskaźnika true/false, wg którego program wypisze jedną lub dwie liczby.
5. Na koniec daję kilka warunków, które dla dwóch liczb wypiszą je w kolejności od najmniejszej.
Chciałem jeszcze wprowadzić tablicę dynamiczną, ale na razie powiedzmy ze program przewiduje wprowadzenie jedynie 5 liczb :)
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
cout << "podaj 5 liczb" << endl;
float tablica [5][2], suma=0, srednia;
for (int i=0; i<5; i++)
{
cin>>tablica[i][0];
suma+=tablica[i][0];
}
srednia=suma/5;
cout<<"srednia wynosi: "<<srednia<<endl;
float m[2], modul;
int podwojny=0;
for (int i=0; i<5; i++)
{
tablica[i][1]=abs(tablica[i][0]-srednia);
if (i==0)
{
m[0]=tablica[i][0];
modul=tablica[i][1];
}
else if ((tablica[i][1]==modul)&&(tablica[i][0]!=m[0]))
{
m[1]=tablica[i][0];
podwojny=1;
}
else if (tablica[i][1]<modul)
{
m[0]=tablica[i][0];
modul=tablica[i][1];
podwojny=0;
}
}
cout<<"najblizsza sredniej liczba to: ";
if ((podwojny==1)&&(m[0]<m[1])) cout<<m[0]<<" i "<<m[1];
else if ((podwojny==1)&&(m[0]>m[1])) cout<<m[1]<<" i "<<m[0];
else cout<<m[0];
cout<<endl;
return 0;
}