Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: erest0r en 22 Junio 2013, 01:29 am



Título: Enviar una matriz desde una funcion a la matriz del main
Publicado por: erest0r en 22 Junio 2013, 01:29 am
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:

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #define N 2
  4.  
  5. int agregarValores();
  6. int multiplicarMatriz(int matriz1[N][N], int matriz2[N][N]);
  7.  
  8. main(){
  9.    int m1[N][N], m2[N][N], m3[N][N], fil, col;
  10.  
  11.    printf("Matriz 1:\n");
  12.    m1[N][N]=agregarValores();
  13.    printf("\nMatriz 2:\n");
  14.    m2[N][N]=agregarValores();
  15.    m3[N][N]=multiplicarMatriz(m1, m2);
  16.    printf("\nEl resultado de la matriz es:\n\n");
  17.    for(fil=0;fil<N;fil++){
  18.        for(col=0;col<N;col++){
  19.            if(col==0)
  20.                printf("\n");
  21.            printf("%d ", m3[fil][col]);
  22.        }
  23.    }
  24.    getch();
  25. }
  26.  
  27. int agregarValores(){
  28.   int fil, col, matriz[N][N];
  29.   for(fil=0;fil<N;fil++){
  30.       for(col=0;col<N;col++){
  31.           printf("\nFila %d, Columna %d = ", fil+1, col+1);
  32.           scanf("%d",&matriz[fil][col]);
  33.       }
  34.   }
  35.    return matriz[N][N];
  36. }
  37.  
  38. int multiplicarMatriz(int matriz1[N][N], int matriz2[N][N]){
  39.    int fil, col, k, acu, matriz3[N][N];
  40.    for(fil=0;fil<N;fil++){
  41.        for(col=0;col<N;col++){
  42.            for(k=0;k<N;k++){
  43.                matriz3[fil][col]+=matriz1[fil][k]*matriz2[k][col];
  44.            }
  45.        }
  46.    }
  47.    return matriz3[N][N];
  48. }

Gracias de antemano


Título: Re: Enviar una matriz desde una funcion a la matriz del main
Publicado por: amchacon en 22 Junio 2013, 01:47 am
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  ;)


Título: Re: Enviar una matriz desde una funcion a la matriz del main
Publicado por: erest0r en 22 Junio 2013, 01:58 am
Gracias de nuevo


Título: Re: Enviar una matriz desde una funcion a la matriz del main
Publicado por: leosansan en 22 Junio 2013, 09:05 am
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
  1. #include <stdio.h>
  2. #define N 2
  3.  
  4. void agregarValores(int  matriz[N][N]);
  5. void multiplicarMatriz(int matriz1[N][N], int matriz2[N][N],int matriz3[N][N]);
  6. int main(){
  7.    int m1[N][N], m2[N][N], m3[N][N], fil, col;
  8.  
  9.    printf("Matriz 1:\n");
  10.    agregarValores(m1);
  11.    for(fil=0;fil<N;fil++){
  12.        for(col=0;col<N;col++){
  13.            if(col==0)
  14.                printf("\n");
  15.            printf("%d ", m1[fil][col]);
  16.        }
  17.    }
  18.    printf("\nMatriz 2:\n");
  19.    agregarValores(m2);
  20.    for(fil=0;fil<N;fil++){
  21.        for(col=0;col<N;col++){
  22.            if(col==0)
  23.                printf("\n");
  24.            printf("%d ", m2[fil][col]);
  25.        }
  26.    }
  27.    multiplicarMatriz(m1, m2,m3);
  28.    printf("\nEl resultado de la matriz es:\n\n");
  29.    for(fil=0;fil<N;fil++){
  30.        for(col=0;col<N;col++){
  31.            if(col==0)
  32.                printf("\n");
  33.            printf("%d ", m3[fil][col]);
  34.        }
  35.    }
  36.    reurn 0;
  37. }
  38.  
  39. void agregarValores(int  matriz[N][N]){
  40.   int fil, col;
  41.   for(fil=0;fil<N;fil++){
  42.       for(col=0;col<N;col++){
  43.           printf("\nFila %d, Columna %d = ", fil+1, col+1);
  44.           scanf("%d",&matriz[fil][col]);
  45.       }
  46.   }
  47. }
  48.  
  49. void multiplicarMatriz(int matriz1[N][N], int matriz2[N][N],int matriz3[N][N]){
  50.    int fil, col, k, acu;
  51.    for(fil=0;fil<N;fil++){
  52.        for(col=0;col<N;col++){
  53.            matriz3[fil][col]=0;
  54.            for(k=0;k<N;k++){
  55.                matriz3[fil][col]+=matriz1[fil][k]*matriz2[k][col];
  56.            }
  57.        }
  58.    }
  59. }
  60.  

Saluditos!
(http://i1280.photobucket.com/albums/a497/leosansan/leosan1/leones%20peques/leonpersonajepeque_zps25f3622f.jpg)