Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: snoopty en 6 Diciembre 2021, 12:05 pm



Título: PRODCUCTO DE DOS MATRICES DE 3 X 3 : DUDA
Publicado por: snoopty en 6 Diciembre 2021, 12:05 pm
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
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main( )
  5. {
  6. int numerosmatrizA [3] [3] = { 4, 7, 2,
  7.                               8, 9, 3,
  8.                               1, 5, 5 };
  9.  
  10. int numerosmatrizB [3] [3] = { 8, 9, 1,
  11.                               5, 6, 4,
  12.                               8, 9, 2 };
  13.  
  14.  
  15. int producto [3] [3];  // PRODUCTO DE DOS MATRICES  :  Se va multiplicando cada Elemento de la FILA de la 1er Matriz
  16.                                                   //  con cada Elemento de la COLUMNA de la 2da Matriz
  17.                                                   //  ( Cada Producto se suma al siguiente )
  18.                                                   //  Ej = ((4*8) + (7*5) + (2*8)) + ...
  19.                                                   //       ((4*9) + (7*6) + (2*9)) + ...
  20.  
  21.  
  22. cout << "\n";                       // P q la Matriz PRODUCTO no quede pegada al borde sup
  23. for ( int i = 0; i < 3; i = i + 1 ) // BUCLE para las Filas " i "
  24. {
  25. for ( int j = 0; j < 3; j = j + 1 ) // BUCLE para las Columnas " j "
  26. {
  27. for ( int k = 0; k < 3; k = k + 1 ) // BUCLE para q el Elemento que se ejecuta se vaya MOVIENDO
  28.                                    // a través de las FILAS de la 1er Matriz y las Columnas de la 2da
  29. {
  30.  
  31. cout << "\t";
  32.  
  33. producto [i] [j] = ( producto [i] [j] ) + ( numerosmatrizA [i] [k]  *  numerosmatrizB [k] [j] );
  34.  
  35.                                    // Queda fija la Fila i de numerosmatrizA mientras k se va desplazando por la misma de izq a der    ( LUEGO )
  36.  
  37.                                    // Queda fija la Columna j de numerosmatrizB mientras k se va desplazando por la misma de arr h ab
  38.  
  39.  
  40. cout << producto [i] [j] << " " ;
  41. }
  42. }
  43. cout << "\n";
  44. }
  45. return 0;
  46. }
  47.  

Gracias x leer el mensaje.


Título: Re: PRODCUCTO DE DOS MATRICES DE 3 X 3 : DUDA
Publicado por: Serapis en 6 Diciembre 2021, 13:41 pm
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...

Código:
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.

Código:
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


Título: Re: PRODCUCTO DE DOS MATRICES DE 3 X 3 : DUDA
Publicado por: snoopty en 7 Diciembre 2021, 08:40 am
Gracias x tu respuesta : intentaré encontrarle la vuelta.