[ Topnik_15 @ 08.12.2011. 14:59 ] @
Dobar dan.
Zadatak je da iscitam 10 brojeva, nadjem njihovu artimeticku sredinu i da na izlazu dobijem koji je od unesenih brojeva najblizi artimetickoj sredini.
Za sad imam ovo:

Code:
for ( int i = 1; i <= 10; i++){
        cout << "Unesi " << i << " broj polja:";
        cin >> polje[i];
        zbir += polje[i];
        brojac++;
}

float AS = static_cast<float>(zbir)/brojac;
cout << "Ukupan zbir brojeva: " << zbir << endl;
cout << "Artimeticka sredina: " << AS << endl;
float broj = round(AS);

for ( int i = 1; i <= 10; i++){
        if ( polje[i] == broj ){
                cout <<" Polje[" << i << "] = " << polje[i] << " a taj broj je ujedno i najblizi artimetickoj sredini." << endl;
        }
}


Da li moze netko dopuniti ili objasnuti kako da dobijem na izlazu broj koji je od uneseni brojeva najblizi artimetickoj sredini ?
[ Mihajlo Cvetanović @ 08.12.2011. 15:24 ] @
Moraš da nađeš broj koji je najbliži datom broju, a ne koji je jednak datom broju. Ne zna se koji je broj najbliži sve dok ne prođeš kroz celu listu. Ako je dat broj N onda je njemu najbliži onaj broj X koji čini da je abs(N - X) najmanje. Znači, imaš petlju i tražiš minimalan float min_diff = abs(N - X). Kad god nađeš abs(N - X) koji je manji od postojećeg min_diff onda zapamtiš novi min_diff, a zapamtiš i X. Na kraju, to jest posle petlje ispiši X. Pre petlje postavi min_diff na neki jako veliki broj. Može recimo konstanta FLT_MAX koja je definisana u #include <cfloat>, odnosno #include <float.h>.