PRODCUCTO DE DOS MATRICES DE 3 X 3 : DUDA

Iniciado por snoopty, 6 Diciembre 2021, 12:05 PM

0 Miembros y 1 Visitante están viendo este tema.

snoopty

El resultado que devuelve este Producto me cuesta entenderlo : En principio intuyo que está mal por muchas razones ..... algunas, que el 1er resultado que debería de arrojar sería ( 32 + 35 + 16 = " 83 " ) Y además es notoria la diferencia entre los resultados 4to, 5to y 6to - Valores muy pequeños - respecto del resto de los resultados - Valores Enormes -

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

int main( )
{
int numerosmatrizA [3] [3] = { 4, 7, 2,
                              8, 9, 3,
                              1, 5, 5 };

int numerosmatrizB [3] [3] = { 8, 9, 1,
                              5, 6, 4,
                              8, 9, 2 };


int producto [3] [3];  // PRODUCTO DE DOS MATRICES  :  Se va multiplicando cada Elemento de la FILA de la 1er Matriz
                                                  //  con cada Elemento de la COLUMNA de la 2da Matriz
                                                  //  ( Cada Producto se suma al siguiente )
                                                  //  Ej = ((4*8) + (7*5) + (2*8)) + ...
                                                  //       ((4*9) + (7*6) + (2*9)) + ...


cout << "\n";                       // P q la Matriz PRODUCTO no quede pegada al borde sup
for ( int i = 0; i < 3; i = i + 1 ) // BUCLE para las Filas " i "
{
for ( int j = 0; j < 3; j = j + 1 ) // BUCLE para las Columnas " j "
{
for ( int k = 0; k < 3; k = k + 1 ) // BUCLE para q el Elemento que se ejecuta se vaya MOVIENDO
                                   // a través de las FILAS de la 1er Matriz y las Columnas de la 2da
{

cout << "\t";

producto [i] [j] = ( producto [i] [j] ) + ( numerosmatrizA [i] [k]  *  numerosmatrizB [k] [j] );

                                   // Queda fija la Fila i de numerosmatrizA mientras k se va desplazando por la misma de izq a der    ( LUEGO )

                                   // Queda fija la Columna j de numerosmatrizB mientras k se va desplazando por la misma de arr h ab


cout << producto [i] [j] << " " ;
}
}
cout << "\n";
}
return 0;
}


Gracias x leer el mensaje.

Serapis

#1
Ni hace falta mirar el código... cuando dices que te dan valores muy elevados.

Debes usar un array temporal, para mantener los valores que se van calculando, de otro modo acabas multiplicando por un valor ya calculado, varias veces...

temp[x][y] = (A[x][y] + ( B[x][z] * C[z][y] ))

p.d.: Nota que A, en realidad es también temp...
Te lo resumo, nota como la solución se devuelve en un array por referencia... y los arrays de origen no se alteran.


funcion MulMatrices(M1[][], M2[][], Ms[][])
   entero x, y, z
   
   bucle para x desde 0 a 2
       bucle para y desde 0 a 2
           Ms[x][y] = 0   //esto permite que el mismo array pueda ser reutilizado múltiples veces.
           bucle para z desde 0 a 2
               Ms[x][y] = (Ms[x][y] + (M1[x][z] * M2[z][y]) )
           siguiente
       Siguiente
   siguiente
fin funcion

snoopty

Gracias x tu respuesta : intentaré encontrarle la vuelta.