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");
}
}
Debes tener en cuenta como se multiplican las matrices
http://www.youtube.com/watch?v=eRBuGozq6Us
[youtube=425,350]http://www.youtube.com/watch?v=eRBuGozq6Us[/youtube]
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
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");
}
}
Gracias Avesudra,
solucionado
un saludo