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 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; }
|
|
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!). |
|
rooker Temat założony przez niniejszego użytkownika |
» 2013-01-13 19:00:27 Po wywolaniu: maxmin( t ); cout << wartosc_max.max;
wszystko się kompiluje tylko głupoty pokazuje. |
|
DejaVu |
» 2013-01-13 19:06:05 Cóż... to przeczytaj jeszcze ze 3 razy posta, którego napisałem wcześniej :) |
|
rooker Temat założony przez niniejszego użytkownika |
» 2013-01-13 19:07:49 n i m są stałymi globalnymi |
|
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: 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ć |
|
DejaVu |
» 2013-01-13 21:21:52 |
|
rooker Temat założony przez niniejszego użytkownika |
» 2013-01-14 16:03:46 Tu jest cały kod: 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; } |
|
« 1 » 2 |