elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Enviar una matriz desde una funcion a la matriz del main
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Enviar una matriz desde una funcion a la matriz del main  (Leído 3,996 veces)
erest0r

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Enviar una matriz desde una funcion a la matriz del main
« 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


En línea

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


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Enviar una matriz desde una funcion a la matriz del main
« Respuesta #1 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  ;)


En línea

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

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: Enviar una matriz desde una funcion a la matriz del main
« Respuesta #2 en: 22 Junio 2013, 01:58 am »

Gracias de nuevo
En línea

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


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Enviar una matriz desde una funcion a la matriz del main
« Respuesta #3 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!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines