liczba z tablicy najbardziej zbliżona do średniej z liczb w tablicy
Ostatnio zmodyfikowano 2020-01-13 22:57
wirusomaniak Temat założony przez niniejszego użytkownika |
liczba z tablicy najbardziej zbliżona do średniej z liczb w tablicy » 2020-01-13 22:11:26 #include <iostream>
using namespace std;
float bzw( float, float * ); float * naj_zblizona( float *, int, float ); float sred_aryt( float *, int ); int main() { cout << "Ilu elementowa tablica?:"; int ile; cin >> ile; if( ile <= 0 ) return 0; float * tab = new float[ ile ]; for( int x = 0; x < ile; x++ ) { cout << "Podaj liczbe:"; cin >> tab[ x ]; } float sred = sred_aryt( tab, ile ); float * wsk = naj_zblizona( tab, ile, sred ); if( wsk[ 3 ] != 1 ) cout << "Liczba z podanych najbardziej zblizona do sredniej:" <<*( wsk + 1 ) << endl; if( wsk[ 3 ] == 1 ) { cout << "Liczba z podanych najbardziej zblizona do sredniej:" << wsk[ 1 ] << " i " << wsk[ 2 ] << endl; } delete[] tab; cin.get(); cin.get(); return 0; }
float sred_aryt( float * tab, int size ) { float sred = 0; for( float * w = tab; w != tab + size; w++ ) { sred += * w; } return sred / size; }
float * naj_zblizona( float * tab, int ile, float sred ) { float zblizona_naj[ 4 ] = { bzw( sred, tab ), * tab }; zblizona_naj[ 3 ] = 0; for( float * w = tab; w != tab + ile; w++ ) { if( w != tab ) { if( bzw( sred, w ) < zblizona_naj[ 0 ] ) { zblizona_naj[ 0 ] = bzw( sred, w ); zblizona_naj[ 1 ] = * w; } else { if( bzw( sred, w ) == zblizona_naj[ 0 ] &&* w != zblizona_naj[ 1 ] ) { zblizona_naj[ 2 ] = * w; zblizona_naj[ 3 ] = 1; } } if( w == tab +( ile - 1 ) && bzw( sred, zblizona_naj + 2 ) > zblizona_naj[ 0 ] ) zblizona_naj[ 3 ] = 0; } } float * ws = zblizona_naj; return ws; }
float bzw( float sred, float * w ) { if( sred >* w ) return sred -* w; else return * w - sred; } Dlaczego wiersz: cout << "Sred. aryt. z podanych liczb wynosi:" << sred << endl; wprowadza zmiany w wsk[1]? (Uważam tak, ponieważ gdy analizowałem program w poszukiwaniu błędu to wartość wsk[1] zmieniła się po powyższej linii. Natomiast gdy ustawiłem ją jako komentarz program zaczął pokazywać prawidłową wartość.) |
|
pekfos |
» 2020-01-13 22:57:14 naj_zblizona() zwraca wskaźnik na zmienną lokalną. Zmienna lokalna nie istnieje po wyjściu z funkcji. |
|
« 1 » |