Problem z odpowiednim wyświetlaniem i mnożeniem macierzy
Ostatnio zmodyfikowano 2015-04-25 07:56
pytalski Temat założony przez niniejszego użytkownika |
Problem z odpowiednim wyświetlaniem i mnożeniem macierzy » 2015-04-24 00:09:01 Witam Mam problem. Tworzę tablicę z macierzami. Wyświetlanie tablic macierzy A i Macierzy B przebiega OK, z efektem setw, natomiast Dodawanie i mnożenie liczby są pod spodem. No i mnożenie macierzy daje inne wyniki niż powinny być. Gdzie popełniłem błąd? #include <iostream> #include <time.h> #include <cstdlib> #include <iomanip>
using namespace std;
int main() { int c[ 3 ][ 4 ]; int u[ 2 ][ 2 ]; int d[ 2 ][ 3 ] = { { 8, 0, 4 }, { 4, 8, 2 } }; int e[ 3 ][ 2 ] = { { 2, 7 }, { 3, 6 }, { 5, 9 } }; int ** tab1 = new int *[ 3 ]; for( int i = 0; i < 3; i++ ) tab1[ i ] = new int[ 4 ]; int ** tab2 = new int *[ 3 ]; for( int i = 0; i < 3; i++ ) tab2[ i ] = new int[ 4 ]; srand( time( 0 ) ); for( int i = 0; i < 3; i++ ) for( int j = 0; j < 4; j++ ) { tab1[ i ][ j ] = rand() % 10; tab2[ i ][ j ] = rand() % 10; } cout << "Macierz A: " << endl; for( int i = 0; i < 3; i++ ) { for( int j = 0; j < 4; j++ ) cout << setw( 3 ) << tab1[ i ][ j ]; cout << endl; } cout << "Macierz B: " << endl;; for( int i = 0; i < 3; i++ ) { for( int j = 0; j < 4; j++ ) cout << setw( 3 ) << tab2[ i ][ j ]; cout << endl; } for( int i = 0; i < 3; i++ ) { for( int j = 0; j < 4; j++ ) c[ i ][ j ] = tab1[ i ][ j ] + tab2[ i ][ j ]; } cout << "Macierz A + Macierz B = " << endl; for( int i = 0; i < 3; i++ ) for( int j = 0; j < 4; j++ ) { cout << setw( 3 ) << c[ i ][ j ]; cout << endl; } for( int i = 0; i < 2; i++ ) for( int j = 0; j < 2; j++ ) for( int k = 0; k < 3; k++ ) { u[ i ][ j ] = d[ i ][ k ] * e[ k ][ j ]; } cout << "Macierz C * Macierz D = " << endl; for( int i = 0; i < 2; i++ ) for( int j = 0; j < 2; j++ ) { cout << setw( 3 ) << u[ i ][ j ]; cout << endl; } for( int i = 0; i < 3; i++ ) { delete[] tab1[ i ]; delete[] tab2[ i ]; } return 0; } } |
|
darko202 |
» 2015-04-24 08:15:45 błąd masz w sposobie mnożenia macierzy pozycja z macierzy wynikowej to suma iloczynów wiersza i kolumny a ty mnożysz inaczej, for( int i = 0; i < 2; i++ ) for( int j = 0; j < 2; j++ ) for( int k = 0; k < 3; k++ ) { u[ i ][ j ] = d[ i ][ k ] * e[ k ][ j ]; }
opis masz np. http://pl.wikipedia.org/wiki/Mno%C5%BCenie_macierzy |
|
pytalski Temat założony przez niniejszego użytkownika |
» 2015-04-24 17:31:19 OK, mnożenia macierzy jest już OK. Natomiast dalej nie wiem jak zrobić żeby dodawanie i mnożenie wyglądało jak Macierz A i Macierz B:
http://iv.pl/images/15199808185063822581.jpg |
|
darko202 |
» 2015-04-25 07:56:03 zastanów się co robi linia cout << endl; cout << "Macierz C * Macierz D = " << endl; for( int i = 0; i < 2; i++ ) { for( int j = 0; j < 2; j++ ) { cout << setw( 3 ) << u[ i ][ j ]; } cout << endl; }
|
|
« 1 » |