Hola, es mi primer post y mi problema es que haciendo una multiplicacion de matrices no entiendo porque la funcion no envia los datos correcto a la funcion del main, este es mi codigo:
#include <stdio.h>
#include <conio.h>
#define N 2
int agregarValores();
int multiplicarMatriz(int matriz1[N][N], int matriz2[N][N]);
main(){
int m1[N][N], m2[N][N], m3[N][N], fil, col;
printf("Matriz 1:\n");
m1[N][N]=agregarValores();
printf("\nMatriz 2:\n");
m2[N][N]=agregarValores();
m3[N][N]=multiplicarMatriz(m1, m2);
printf("\nEl resultado de la matriz es:\n\n");
for(fil=0;fil<N;fil++){
for(col=0;col<N;col++){
if(col==0)
printf("\n");
printf("%d ", m3[fil][col]);
}
}
getch();
}
int agregarValores(){
int fil, col, matriz[N][N];
for(fil=0;fil<N;fil++){
for(col=0;col<N;col++){
printf("\nFila %d, Columna %d = ", fil+1, col+1);
scanf("%d",&matriz[fil][col]);
}
}
return matriz[N][N];
}
int multiplicarMatriz(int matriz1[N][N], int matriz2[N][N]){
int fil, col, k, acu, matriz3[N][N];
for(fil=0;fil<N;fil++){
for(col=0;col<N;col++){
for(k=0;k<N;k++){
matriz3[fil][col]+=matriz1[fil][k]*matriz2[k][col];
}
}
}
return matriz3[N][N];
}
Gracias de antemano
La función devuelve un int, no una matriz entera...
Lo que tienes que hacer es pasarla como parámetro en la función. Las matrices por defecto se pasan por referencia y mantienen los cambios tras finalizar la función.
Por cierto no uses getch() ni la librería conio, las dos son consideradas malas prácticas de programación ;)
Gracias de nuevo
Como te ha indicado amchacon, las matrices se pasan por referencia, es decir, una vez que están definidas en una función, mantienen sus valores en otra función, por lo que no es necesario el return de las funciones que pones de agregar y multiplicar. A cambio esas funciones, además de ser del tipo void ya que no devuelven nada, han de tener como argumento a la matriz que se considere en cada caso.
Quien se debe declarar como función int es main, con su correspondiente return. Cuestiones del estándar de C/C++.
Otro detallito que te faltó es inicializar la matriz producto antes de empezar a realizar la suma de las multiplicaciones de fila por columna:
#include <stdio.h>
#define N 2
void agregarValores(int matriz[N][N]);
void multiplicarMatriz(int matriz1[N][N], int matriz2[N][N],int matriz3[N][N]);
int main(){
int m1[N][N], m2[N][N], m3[N][N], fil, col;
printf("Matriz 1:\n");
agregarValores(m1);
for(fil=0;fil<N;fil++){
for(col=0;col<N;col++){
if(col==0)
printf("\n");
printf("%d ", m1[fil][col]);
}
}
printf("\nMatriz 2:\n");
agregarValores(m2);
for(fil=0;fil<N;fil++){
for(col=0;col<N;col++){
if(col==0)
printf("\n");
printf("%d ", m2[fil][col]);
}
}
multiplicarMatriz(m1, m2,m3);
printf("\nEl resultado de la matriz es:\n\n");
for(fil=0;fil<N;fil++){
for(col=0;col<N;col++){
if(col==0)
printf("\n");
printf("%d ", m3[fil][col]);
}
}
reurn 0;
}
void agregarValores(int matriz[N][N]){
int fil, col;
for(fil=0;fil<N;fil++){
for(col=0;col<N;col++){
printf("\nFila %d, Columna %d = ", fil+1, col+1);
scanf("%d",&matriz[fil][col]);
}
}
}
void multiplicarMatriz(int matriz1[N][N], int matriz2[N][N],int matriz3[N][N]){
int fil, col, k, acu;
for(fil=0;fil<N;fil++){
for(col=0;col<N;col++){
matriz3[fil][col]=0;
for(k=0;k<N;k++){
matriz3[fil][col]+=matriz1[fil][k]*matriz2[k][col];
}
}
}
}
Saluditos!
(http://i1280.photobucket.com/albums/a497/leosansan/leosan1/leones%20peques/leonpersonajepeque_zps25f3622f.jpg)