Problem z przeciązeniem operatora*, dla klasy macierz
Ostatnio zmodyfikowano 2017-01-09 18:00
Gabli Temat założony przez niniejszego użytkownika |
Problem z przeciązeniem operatora*, dla klasy macierz » 2017-01-09 00:10:26 Witam. Mam problem z przeciążeniem operatora * , ktory ma u mnie mnożyć dwie macierze. Program się kompiluje, ale podczas uruchomienia wysypuje się. Nie mam pojęcia dlaczego. Moja funkcja zaprzyjażniona i konstruktory: Macierz operator *( const Macierz & m1, const Macierz & m2 ) { Macierz m3( m1.kolumny, m2.wiersze ); if( m1.kolumny != m1.wiersze ) cerr << "Blad"; else { for( int i = 0; i < m1.wiersze; i++ ) { for( int j = 0; j < m2.kolumny; j++ ) { m3.tab[ i ][ j ] = 0; for( int k = 0; k < m2.wiersze; i++ ) { m3.tab[ i ][ j ] = m3.tab[ i ][ j ] + m1.tab[ i ][ k ] * m2.tab[ k ][ j ]; } } } return m3; } }
Macierz::Macierz( unsigned int wier, unsigned int kol ) : wiersze( wier ) , kolumny( kol ) { tab = new float *[ wier ]; for( int i = 0; i < wier; i++ ) { tab[ i ] = new float[ kol ]; for( int j = 0; j < kol; j++ ) { } } }
Macierz::Macierz( Macierz const & m ) { wiersze = m.wiersze; kolumny = m.kolumny; tab = new float *[ wiersze ]; for( int i = 0; i < wiersze; i++ ) { tab[ i ] = new float[ kolumny ]; for( int j = 0; j < kolumny; j++ ) { } } for( int i = 0; i < wiersze; i++ ) { for( int j = 0; j < kolumny; j++ ) { tab[ i ][ j ] = m.tab[ i ][ j ]; } } }
To jest mój pierwszy post na forum, dlatego proszę o wyrozumiałość. Z góry dziekuję za pomoc. |
|
RazzorFlame |
» 2017-01-09 08:24:53 for( int i = 0; i < m1.wiersze; i++ ) { for( int j = 0; j < m2.kolumny; j++ ) { m3.tab[ i ][ j ] = 0; for( int k = 0; k < m2.wiersze; i++ ) { m3.tab[ i ][ j ] = m3.tab[ i ][ j ] + m1.tab[ i ][ k ] * m2.tab[ k ][ j ]; } } } W najbardziej zagnieżdżonej pętli masz i++ a raczej chodziło Ci o k++ |
|
darko202 |
» 2017-01-09 08:33:47 1. Powinieneś zawsze opisywać zwracany błąd wykonania. przeważnie jest tam sporo informacji na temat występującego błędu
mając tak szczątkowy kod trudno jest odtworzyć przyczynę błędu.
2. Zapoznaj się z techniką debugowania programu, co pozwoli Ci obserwować wykonywany kod linia po linii. |
|
mateczek |
» 2017-01-09 10:58:48 Do tego co napisał RazzorFlame dodam że powinno być raczej na odwrót Macierz m3( m1.kolumny, m2.wiersze );
Macierz m3( m1.wiersze, m2.kolumny );
Nowo powstała macierz ma mieć tyle wierszy ile wierszy ma macierz 1. I Tyle kolumn ile ma macierz 2 Porównaj sobie z tym poniżej. Kiedyś już był podobny wątek i coś tam klepnąłem http://cpp0x.pl/forum/temat/?id=23012 |
|
Gabli Temat założony przez niniejszego użytkownika |
» 2017-01-09 18:00:27 Tak, powinno byc: Macierz m3( m1.wiersze, m2.kolumny );
oraz k++ w ostatniej pętli, dziękuję wszystkim za udzielone podpowiedzi. |
|
« 1 » |