Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ALONSOQ en 4 Septiembre 2012, 17:09 pm



Título: Multiplicación de matrices
Publicado por: ALONSOQ en 4 Septiembre 2012, 17:09 pm
Hola,

He redactado este codígo que genera, suma, resta , multiplica y multiplica por un escalar matrices.
La función de multiplicar me falla, podeis ayudarme?
gracias.

Código
  1. #include <stdlib.h>
  2. #include<stdio.h>
  3. #include <time.h>
  4.  
  5.  
  6. int n;
  7.  
  8. void generar_matriz (int m[][3]);
  9. void sumar (int m1[][3], int m2[][3]);
  10. void restar (int m1[][3], int m2[][3]);
  11. void multiplicar (int m1[][3], int m2[][3]);
  12. void escalar (int m1[][3]);
  13.  
  14. int   main()
  15. {    
  16.  
  17.        printf("dimension");  
  18.      scanf("%d",&n);  
  19.      int matriz1[n][3];
  20.       int matriz2[n][3];
  21.  
  22.  
  23.        srand (time(NULL));
  24.  
  25.        generar_matriz (matriz1);
  26.        printf("\n");
  27.        generar_matriz (matriz2);
  28.        printf("\n");
  29.        sumar (matriz1, matriz2);
  30.        printf("\n");
  31.        restar (matriz1, matriz2);
  32.        printf("\n");
  33.        multiplicar(matriz1,matriz2);
  34.        printf("\n");
  35.        escalar(matriz1);
  36.  
  37.        printf ("Presione una tecla para salir.....");
  38.        getchar();
  39.  
  40. }
  41. /*********************************************/
  42.  
  43. void generar_matriz (int m[][3])
  44. {
  45.  
  46.    int i,j;
  47.  
  48.    for (i=0;i<n;i++)
  49.        {
  50.            for (j=0;j<n;j++)
  51.                {
  52.                    m[i][j]=(rand()%16);
  53.                    printf("%d\t",m[i][j]);
  54.                }
  55.            printf("\n\n");
  56.        }
  57.  
  58. }
  59.  
  60. void sumar (int m1[][3], int m2[][3])
  61. {
  62.    int i,j;      
  63.    for (i=0;i<n;i++)
  64.        {
  65.            for (j=0;j<n;j++)
  66.                {        
  67.                printf("%d\t",(m1[i][j])+(m2[i][j]));
  68.                }
  69.        printf("\n\n");
  70.        }
  71. }
  72.  
  73. void restar (int m1[][3], int m2[][3])
  74. {
  75.    int i,j;      
  76.    for (i=0;i<n;i++)
  77.        {
  78.            for (j=0;j<n;j++)
  79.                {
  80.  
  81.                printf("%d\t",(m1[i][j])-(m2[i][j]));
  82.                }
  83.        printf("\n\n");
  84.        }
  85.  
  86.  
  87. }
  88. void escalar (int m1[][3]){
  89.     int i, j, e;
  90.     printf("escalar");
  91.     scanf("%d",&e);    
  92.    for (i=0;i<n;i++)
  93.        {
  94.            for (j=0;j<n;j++)
  95.                {
  96.                printf("%d\t", e*(m1[i][j]));
  97.                }
  98.                printf("\n");
  99.        }
  100. }                    
  101.  
  102. void multiplicar (int m1[][3], int m2[][3])
  103. {
  104.    int i,j, k;  
  105.    int m3[n][3];  
  106.    for (i=0;i<n;i++)
  107.        {
  108.            for (j=0;j<n;j++)
  109.                {
  110.                             for (k=0;k<n;k++)
  111.                             {
  112.  
  113.                             m3[i][j]=m3[i][j]+(m1[i][k]*m2[k][j]);
  114.                             }
  115.                printf("%d\t",m3[i][j]);
  116.                }
  117.        printf("\n\n");
  118.        }
  119.  
  120.  
  121. }


Título: Re: Multiplicación de matrices
Publicado por: KaL3o en 5 Septiembre 2012, 11:43 am
Debes tener en cuenta como se multiplican las matrices

http://www.youtube.com/watch?v=eRBuGozq6Us

eRBuGozq6Us


Título: Re: Multiplicación de matrices
Publicado por: ALONSOQ en 5 Septiembre 2012, 14:09 pm
Hola Kal,

El problema que me da es que la matriz la imprime como si no estuviera inicializada, es decir cada campo aparece relleno de una ristra de numeros.

Un saludo


Título: Re: Multiplicación de matrices
Publicado por: avesudra en 5 Septiembre 2012, 14:43 pm
Hola Kal,

El problema que me da es que la matriz la imprime como si no estuviera inicializada, es decir cada campo aparece relleno de una ristra de numeros.

Un saludo
¿Puede ser por que no los inicializas a 0? Voy a probar y te digo.

EDITO:No sé como va el código pero es eso seguro, los inicializo a 0 porque si no el compilador le dá un valor cualquiera, deberías declarar las variables dentro de los fors , por que si no despues no las puedes reutilizar porque lo tengo que volver a inicializar a 0 o a lo que sea , te dejo la función:
Código
  1. void multiplicar (int m1[][3], int m2[][3])
  2. {
  3.    int m3[n][3];
  4.    for(int i = 0; i<=n; ++i) //Mientras i sea menor o igual a n
  5.    {
  6.        for(int j = 0; j<=3; ++j) //Mientras j sea menor o igual a 3
  7.        {
  8.            m3[i][j]=0;//Establece el elemento con fila i y columna j en 0
  9.        }
  10.    }
  11.    for (int i=0; i<n; i++)
  12.    {
  13.        for (int j=0; j<n; j++)
  14.        {
  15.            for (int k=0; k<n; k++)
  16.            {
  17.  
  18.                m3[i][j]=m3[i][j]+(m1[i][k]*m2[k][j]);
  19.            }
  20.            printf("%d\t",m3[i][j]);
  21.        }
  22.        printf("\n\n");
  23.    }
  24. }
  25.  


Título: Re: Multiplicación de matrices
Publicado por: ALONSOQ en 5 Septiembre 2012, 18:03 pm
Gracias Avesudra,
solucionado

un saludo