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

Problem z odpowiednim wyświetlaniem i mnożeniem macierzy

Ostatnio zmodyfikowano 2015-04-25 07:56
Autor Wiadomość
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?

C/C++
#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 ];
       
    }
   
    /////////////////Złe wyświetlanie///////////////
    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;
    }
    ///////////////Mnożenie///////////////////////
    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;
}
}
P-131354
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,
C/C++
///////////////Mnożenie///////////////////////
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 ]; //błąd
   
}
opis masz
np. http://pl.wikipedia.org/wiki​/Mno%C5%BCenie_macierzy






P-131358
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
P-131379
darko202
» 2015-04-25 07:56:03
zastanów się co robi  linia
cout << endl;

C/C++
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;
}
P-131398
« 1 »
  Strona 1 z 1