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

Problem z funkcją

Ostatnio zmodyfikowano 2013-01-15 03:39
Autor Wiadomość
rooker
Temat założony przez niniejszego użytkownika
Problem z funkcją
» 2013-01-13 10:17:59
Napisałem funkcję zwracającą wartość maks, ale jest problem gdyż pojawia się konsola i zaraz wyskakuje błąd.Funkcja ma zwierać w sobie zagnieżdżoną strukturę. Proszę o sprawdzenie, gdyż zależy mi na czasie

C/C++
struct indeks {
    int im;
    int jm;
};
struct ekstrema {
    int max, min;
    indeks ijmin, ijmax;
};

ekstrema maxmin( int t[ n ][ m ] )
{
    ekstrema wartosc_max;
    wartosc_max.ijmax.im = 0;
    wartosc_max.ijmax.jm = 0;
   
    for( int i = 0; i < n; i++ )
    {
        for( int j = 0; j < m; j++ )
       
        if( t[ i ][ j ] > t[ wartosc_max.ijmax.im ][ wartosc_max.ijmax.jm ] )
        {
            wartosc_max.max = t[ i ][ j ];
        }
       
    } return wartosc_max;
}
P-73775
DejaVu
» 2013-01-13 18:44:28
To się kompiluje?? pierwsze co wali po oczach do deklaracja funkcji, a konkretniej argumentu. Nie da się utworzyć tablicy wielowymiarowej o zmiennej liczbie elementów (na pewno nie w ten sposób!).
P-73827
rooker
Temat założony przez niniejszego użytkownika
» 2013-01-13 19:00:27
Po wywolaniu:
C/C++
maxmin( t );
cout << wartosc_max.max;

wszystko się kompiluje tylko głupoty pokazuje.
P-73829
DejaVu
» 2013-01-13 19:06:05
Cóż... to przeczytaj jeszcze ze 3 razy posta, którego napisałem wcześniej :)
P-73831
rooker
Temat założony przez niniejszego użytkownika
» 2013-01-13 19:07:49
n i m są stałymi globalnymi
P-73832
Admixior
» 2013-01-13 21:19:04
Funkcja nie szuka max wartości lecz ostatniej wartości która jest większa od pierwszej, bo:
C/C++
wartosc_max.ijmax.im = 0;
wartosc_max.ijmax.jm = 0;

więc: if( t[ i ][ j ] > t[ wartosc_max.ijmax.im ][ wartosc_max.ijmax.jm ] )
sprawdza zawsze względem [0][0]

I teraz zapewne wiesz o czym zapomniałeś...

//edit:
@up:no to DejaVu został strolowany ;)

@temat: podaj więcej kodu bo tu tego błędu nie widać
P-73866
DejaVu
» 2013-01-13 21:21:52
@rooker: Zapoznaj się przy okazji z » Porady dla użytkowników cpp0x.plZakładanie tematów na forum zalecenie (sekcja: "Problemy ze źle działającym kodem źródłowym")
P-73867
rooker
Temat założony przez niniejszego użytkownika
» 2013-01-14 16:03:46
Tu jest cały kod:
C/C++
using namespace std;
const int n = 5;
const int m = 6;
void wypelnij( int t[ n ][ m ], int a, int b );
void wypisz( int t[ n ][ m ] );
void indeksymaks( int t[ n ][ m ], int & imaks, int & jmaks );
struct indeks {
    int im;
    int jm;
};
indeks maks2( int t[ n ][ m ] );
void indeksymaks3( int t[ n ][ m ], indeks & ind );
void wypiszind( indeks ind );
struct ekstrema {
    int max, min;
    indeks ijmin, ijmax;
};
ekstrema maxmin( int t[ n ][ m ] );

int main()
{
    srand( time( NULL ) );
    indeks id, ind;
    ekstrema wartosc_max;
    int t[ n ][ m ];
    int im, jm;
    int imaks, jmaks;
    wypelnij( t, 3, 60 );
    wypisz( t );
    indeksymaks( t, imaks, jmaks );
    id = maks2( t );
    cout << endl << id.im << endl << id.jm << endl;
    indeksymaks3( t, ind );
    wypiszind( ind );
    cout << endl;
    maxmin( t );
    cout << wartosc_max.max;
   
   
   
    return 0;
}
void wypelnij( int t[ n ][ m ], int a, int b )
{
    for( int i = 0; i < n; i++ )
    {
        for( int j = 0; j < m; j++ )
        {
            t[ i ][ j ] =( rand() %( b - a ) + a );
        }
    }
}
void wypisz( int t[ n ][ m ] )
{
    for( int i = 0; i < n; i++ )
    {
        for( int j = 0; j < m; j++ )
        {
            cout << t[ i ][ j ] << "   ";
        } cout << endl;
    }
   
}
void indeksymaks( int t[ n ][ m ], int & imaks, int & jmaks )
{
    imaks = 0;
    jmaks = 0;
    for( int i = 0; i < n; i++ )
    {
        for( int j = 0; j < m; j++ )
        {
            if( t[ i ][ j ] > t[ imaks ][ jmaks ] )
            {
                imaks = i;
                jmaks = j;
            }
        }
    } cout << endl << imaks << endl << jmaks << endl;
}

indeks maks2( int t[ n ][ m ] )
{
    indeks id;
    id.im = 0;
    id.jm = 0;
    for( int i = 0; i < n; i++ )
    {
        for( int j = 0; j < m; j++ )
        {
            if( t[ i ][ j ] > t[ id.im ][ id.jm ] )
            {
                id.im = i;
                id.jm = j;
            }
        }
    } return id;
}

void indeksymaks3( int t[ n ][ m ], indeks & ind )
{
    ind.im = 0;
    ind.jm = 0;
    for( int i = 0; i < n; i++ )
    {
        for( int j = 0; j < m; j++ )
        {
            if( t[ i ][ j ] > t[ ind.im ][ ind.jm ] )
            {
                ind.im = i;
                ind.jm = j;
            }
        }
       
    }
   
}

void wypiszind( indeks ind )
{
    cout << endl << ind.im << endl << ind.jm << endl;
}

ekstrema maxmin( int t[ n ][ m ] )
{
    ekstrema wartosc_max;
    t[ wartosc_max.ijmax.im ][ wartosc_max.ijmax.jm ] = t[ 0 ][ 0 ];
   
    for( int i = 0; i < n; i++ )
    {
        for( int j = 0; j < m; j++ )
       
        if( t[ i ][ j ] > t[ wartosc_max.ijmax.im ][ wartosc_max.ijmax.jm ] )
        {
            wartosc_max.max = t[ i ][ j ];
        }
       
    } return wartosc_max;
}
P-73933
« 1 » 2
  Strona 1 z 2 Następna strona