| 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 |