Enviar una matriz desde una funcion a la matriz del main

Iniciado por erest0r, 22 Junio 2013, 01:29 AM

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

erest0r

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
Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.

amchacon

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  ;)
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

erest0r

Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.

leosansan

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:


Código (cpp) [Seleccionar]
#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!