Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

liczba z tablicy najbardziej zbliżona do średniej z liczb w tablicy

Ostatnio zmodyfikowano 2020-01-13 22:57
Autor Wiadomość
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
C/C++
#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 );
    //cout <<"Sred. aryt. z podanych liczb wynosi:"<< sred<<endl;
    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ść.)
P-176054
pekfos
» 2020-01-13 22:57:14
naj_zblizona() zwraca wskaźnik na zmienną lokalną. Zmienna lokalna nie istnieje po wyjściu z funkcji.
P-176055
« 1 »
  Strona 1 z 1