Multiplicación de matrices

Iniciado por ALONSOQ, 4 Septiembre 2012, 17:09 PM

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

ALONSOQ

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.

#include <stdlib.h>
#include<stdio.h>
#include <time.h>


int n;

void generar_matriz (int m[][3]);
void sumar (int m1[][3], int m2[][3]);
void restar (int m1[][3], int m2[][3]);
void multiplicar (int m1[][3], int m2[][3]);
void escalar (int m1[][3]);

int   main()
{     

        printf("dimension"); 
      scanf("%d",&n); 
      int matriz1[n][3];
       int matriz2[n][3];
     
     
        srand (time(NULL));
         
        generar_matriz (matriz1);
        printf("\n");
        generar_matriz (matriz2);
        printf("\n");
        sumar (matriz1, matriz2);
        printf("\n");
        restar (matriz1, matriz2);
        printf("\n");
        multiplicar(matriz1,matriz2);
        printf("\n");
        escalar(matriz1);
         
        printf ("Presione una tecla para salir.....");
        getchar();
       
}
/*********************************************/

void generar_matriz (int m[][3])
{
     
    int i,j;
   
    for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
                {
                    m[i][j]=(rand()%16);
                    printf("%d\t",m[i][j]);
                }
            printf("\n\n");
        }
               
}

void sumar (int m1[][3], int m2[][3])
{
    int i,j;     
    for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
                {       
                printf("%d\t",(m1[i][j])+(m2[i][j]));
                }
        printf("\n\n");
        }
}

void restar (int m1[][3], int m2[][3])
{
    int i,j;     
    for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
                {
               
                printf("%d\t",(m1[i][j])-(m2[i][j]));
                }
        printf("\n\n");
        }


}
void escalar (int m1[][3]){
     int i, j, e;
     printf("escalar");
     scanf("%d",&e);     
    for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
                {
                printf("%d\t", e*(m1[i][j]));
                }
                printf("\n");
        }
}                     
     
void multiplicar (int m1[][3], int m2[][3])
{
    int i,j, k;   
    int m3[n][3];   
    for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
                {
                             for (k=0;k<n;k++)
                             {
               
                             m3[i][j]=m3[i][j]+(m1[i][k]*m2[k][j]);
                             }
                printf("%d\t",m3[i][j]);
                }
        printf("\n\n");
        }


}


KaL3o

Todos los caminos se vuelven a juntar. Pero nunca de la misma forma.

ALONSOQ

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

avesudra

#3
Cita de: 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
¿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:
void multiplicar (int m1[][3], int m2[][3])
{
   int m3[n][3];
   for(int i = 0; i<=n; ++i) //Mientras i sea menor o igual a n
   {
       for(int j = 0; j<=3; ++j) //Mientras j sea menor o igual a 3
       {
           m3[i][j]=0;//Establece el elemento con fila i y columna j en 0
       }
   }
   for (int i=0; i<n; i++)
   {
       for (int j=0; j<n; j++)
       {
           for (int k=0; k<n; k++)
           {

               m3[i][j]=m3[i][j]+(m1[i][k]*m2[k][j]);
           }
           printf("%d\t",m3[i][j]);
       }
       printf("\n\n");
   }
}

Regístrate en

ALONSOQ

Gracias Avesudra,
solucionado

un saludo