Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: M4RQUS en 12 Septiembre 2018, 13:32 pm



Título: Problemas con Matrices en C
Publicado por: M4RQUS en 12 Septiembre 2018, 13:32 pm
Buenas, tengo un problema quiero realizar la suma de 2 matrices elemento a elemento pero a la hora de imprimir los resultados en vez de imprimirlos todos solo imprime los ultimos resultados. Alguien tiene idea de por que pasa esto??

Gracias de ante mano

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main() {
  5.  
  6. int n = 0;
  7. int m = 0;
  8.  
  9. int MatrizA[n][m];
  10. int MatrizB[n][m];
  11. int MatrizResultado[n][m];
  12.  
  13.  
  14. printf("Ingrese cuantas filas tienen las matrices.\n");
  15. printf("filas: ");
  16. scanf("%d",&n);
  17.  
  18. printf("Ingrese cuantas columnas tienen las matrices.\n");
  19. printf("filas: ");
  20. scanf("%d",&m);
  21.  
  22. ///Llenado de matrices
  23. for(int i=0;i<n;i++){
  24. for(int j=0; j<m;j++){
  25.  
  26. printf("Ingrese un numero para la posicion %d %d de la matriz A\n",i+1,j+1);
  27. printf("Numero: ");
  28. scanf("%d",&MatrizA[i][j]);
  29.  
  30. printf("MA: %d\n",MatrizA[i][j]);
  31.  
  32. printf("Ingrese un numero para la posicion %d %d de la matriz B\n",i+1,j+1);
  33. printf("Numero: ");
  34. scanf("%d",&MatrizB[i][j]);
  35.  
  36. printf("MB: %d\n\n",MatrizA[i][j]);
  37.  
  38. MatrizResultado[i][j] = MatrizA[i][j] + MatrizB[i][j];
  39.  
  40. printf("MR: %d\n",MatrizResultado[i][j]);
  41.  
  42.  
  43. }
  44. }}
  45. ///Muestra de resultados
  46. for(int i=0;i<n;i++){
  47. printf("|");
  48. for(int j=0; j<m;j++){
  49. printf(" %d ",MatrizResultado[i][j]);
  50. }
  51. printf("|\n");
  52. }
  53.  
  54.  
  55. return 0;
  56. }
  57.  
  58.  
  59.  


Título: Re: Problemas con Matrices en C
Publicado por: MAFUS en 12 Septiembre 2018, 13:51 pm
Así no se dimensionan matrices.
Una matriz estática no se debe dimensionar con variables. Si puedes es por extensión del compilador.
Una matriz no debe tener dimensión 0. Si puedes es por extensión del compilador.
Una vez que se ha dimensionado una matriz estática no puede cambiar de tamaño. Eso que has hecho de pedir el tamaño después es totalmente erróneo.
C no comprueba el límite de los datos, es tarea del programador hacerlo. Has estado escribiendo fuera de la matriz y eso te podría causar problemas en programas mayores.

Si necesitas trabajar de esa forma debes mirar lo de la memoria dinámica, la familia de funciones alloc y free para liberar la memoria adquirida cuando ya no se necesite.


Título: Re: Problemas con Matrices en C
Publicado por: M4RQUS en 12 Septiembre 2018, 14:32 pm
Muchas gracias!



Así no se dimensionan matrices.
Una matriz estática no se debe dimensionar con variables. Si puedes es por extensión del compilador.
Una matriz no debe tener dimensión 0. Si puedes es por extensión del compilador.
Una vez que se ha dimensionado una matriz estática no puede cambiar de tamaño. Eso que has hecho de pedir el tamaño después es totalmente erróneo.
C no comprueba el límite de los datos, es tarea del programador hacerlo. Has estado escribiendo fuera de la matriz y eso te podría causar problemas en programas mayores.

Si necesitas trabajar de esa forma debes mirar lo de la memoria dinámica, la familia de funciones alloc y free para liberar la memoria adquirida cuando ya no se necesite.

Entonces voy a inicializar una dimension fija (supongo que de 100)
y voy a variar el llenado con los m y n que sean menores que 100


Mod: Prohibido el doble o triple post. Usa el botón "Modificar".


Título: Re: Problemas con Matrices en C
Publicado por: MAFUS en 12 Septiembre 2018, 14:57 pm
Bien, esa es buena.


Título: Re: Problemas con Matrices en C
Publicado por: jca1 en 13 Septiembre 2018, 17:12 pm
Claro, por ejemplo podes definir a las matrices despues de pedir los valores n y m.


Título: Re: Problemas con Matrices en C
Publicado por: MAFUS en 13 Septiembre 2018, 17:49 pm
Pero tienen que ser dinámicas al estilo
Código
  1. // supongamos m y n ya adquiridos desde el usuario
  2. int **matriz;
  3.  
  4. matriz = malloc(m * sizeof(int *));
  5. for(int i=0; i<m; ++i)
  6.    matriz[i] = malloc(n * sizeof(int));
  7.  


Título: Re: Problemas con Matrices en C
Publicado por: jca1 en 13 Septiembre 2018, 18:49 pm
Pero tienen que ser dinámicas al estilo
Código
  1. // supongamos m y n ya adquiridos desde el usuario
  2. int **matriz;
  3.  
  4. matriz = malloc(m * sizeof(int *));
  5. for(int i=0; i<m; ++i)
  6.    matriz[i] = malloc(n * sizeof(int));
  7.  

yo digo hacer esto:
Código:
        int n ;
int m ;



printf("Ingrese cuantas filas tienen las matrices.\n");
printf("filas: ");
scanf("%d",&n);

printf("Ingrese cuantas columnas tienen las matrices.\n");
printf("filas: ");
scanf("%d",&m);


int MatrizA[n][m];
int MatrizB[n][m];
int MatrizResultado[n][m];


Título: Re: Problemas con Matrices en C
Publicado por: M4RQUS en 13 Septiembre 2018, 19:25 pm
Pero tienen que ser dinámicas al estilo
Código
  1. // supongamos m y n ya adquiridos desde el usuario
  2. int **matriz;
  3.  
  4. matriz = malloc(m * sizeof(int *));
  5. for(int i=0; i<m; ++i)
  6.    matriz[i] = malloc(n * sizeof(int));
  7.  

esto se ve interesante pero no tengo idea de como funciona jaja recien estoy comenzando con C