Problemas con Matrices en C

Iniciado por M4RQUS, 12 Septiembre 2018, 13:32 PM

0 Miembros y 2 Visitantes están viendo este tema.

M4RQUS

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


#include <stdio.h>
#include <stdlib.h>

int main() {

int n = 0;
int m = 0;

int MatrizA[n][m];
int MatrizB[n][m];
int MatrizResultado[n][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);

///Llenado de matrices
for(int i=0;i<n;i++){
for(int j=0; j<m;j++){

printf("Ingrese un numero para la posicion %d %d de la matriz A\n",i+1,j+1);
printf("Numero: ");
scanf("%d",&MatrizA[i][j]);

printf("MA: %d\n",MatrizA[i][j]);

printf("Ingrese un numero para la posicion %d %d de la matriz B\n",i+1,j+1);
printf("Numero: ");
scanf("%d",&MatrizB[i][j]);

printf("MB: %d\n\n",MatrizA[i][j]);

MatrizResultado[i][j] = MatrizA[i][j] + MatrizB[i][j];

printf("MR: %d\n",MatrizResultado[i][j]);


}
}}
///Muestra de resultados
for(int i=0;i<n;i++){
printf("|");
for(int j=0; j<m;j++){
printf(" %d ",MatrizResultado[i][j]);
}
printf("|\n");
}


return 0;
}


"Paciencia Virtud de Sabios"
System.out.println("Iniciado pero con ganas de Aprender");

MAFUS

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.

M4RQUS

#2
Muchas gracias!




Cita de: 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.

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".
"Paciencia Virtud de Sabios"
System.out.println("Iniciado pero con ganas de Aprender");

MAFUS


jca1

Claro, por ejemplo podes definir a las matrices despues de pedir los valores n y m.

MAFUS

Pero tienen que ser dinámicas al estilo

// supongamos m y n ya adquiridos desde el usuario
int **matriz;

matriz = malloc(m * sizeof(int *));
for(int i=0; i<m; ++i)
    matriz[i] = malloc(n * sizeof(int));

jca1

Cita de: MAFUS en 13 Septiembre 2018, 17:49 PM
Pero tienen que ser dinámicas al estilo

// supongamos m y n ya adquiridos desde el usuario
int **matriz;

matriz = malloc(m * sizeof(int *));
for(int i=0; i<m; ++i)
    matriz[i] = malloc(n * sizeof(int));


yo digo hacer esto:
        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];

M4RQUS

Cita de: MAFUS en 13 Septiembre 2018, 17:49 PM
Pero tienen que ser dinámicas al estilo

// supongamos m y n ya adquiridos desde el usuario
int **matriz;

matriz = malloc(m * sizeof(int *));
for(int i=0; i<m; ++i)
    matriz[i] = malloc(n * sizeof(int));


esto se ve interesante pero no tengo idea de como funciona jaja recien estoy comenzando con C
"Paciencia Virtud de Sabios"
System.out.println("Iniciado pero con ganas de Aprender");