matriz imprime basura

Iniciado por cho250425, 19 Febrero 2017, 04:57 AM

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

cho250425

ayuda por favor no se por que la matriz me imprime lo que debe de ser pero tambien me imprime basura :( soy nuevo en esto de programacion por favor ayuda :(

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

void LeerInt(int*,int*,int*,int*,char*);
void M1(int*,int*,int*,int,char*);

int main(){
int x[50];
int x2[50];
int x1[50];
int d[50];
int n;
LeerInt(x,x1,x2,&n,"NUMERO");
M1(x,x1,x2,n,"NUMERO");


return 0;
}

void LeerInt(int *x,int*x1,int*x2,int *m,char*nom){
int i;
int matriz[100][100];
printf("\n\t elementos del  vector son: ");
scanf("%i",m);
for(i=0;i<*m;i++){
printf("\n\t  INGRESE Los elementos del primer vector %s[%i]:", nom,i+1);
scanf("%d",&x[i]);
}
for(i=0;i<*m;i++){
printf("\n\t  INGRESE Los elementos del segundo vector %s[%i]:", nom,i+1);
scanf("%d", &x1[i]);
}
for(i=0;i<*m;i++){
printf("\n\t  INGRESE Los elementos del tercer vector %s[%i]:", nom,i+1);
scanf("%d", &x2[i]);
}
}

void M1(int*x,int*x1,int*x2,int m,char*nom){
    int t,j,k=0,z=0,i=0,l;
int matriz[100][100];

for(t=0;t<m;t++)
for(j=0;j<3;j++)
{
matriz[t][j]=x[k];k++;
}
for(t=0;t<m;t++)
for(j=0;j<3;j++)
printf("[%d]\n",matriz[t][j]);

for(t=0;t<m;t++)
for(j=0;j<3;j++)
{
matriz[t][j]=x1[z];z++;
}
for(t=0;t<m;t++)
for(j=0;j<3;j++)
printf("[%d]\n",matriz[t][j]);

for(t=0;t<m;t++)
for(j=0;j<3;j++)
{
matriz[t][j]=x2[i];i++;
}
for(t=0;t<m;t++)
for(j=0;j<3;j++)
printf("[%d]\n",matriz[t][j]);
return;}



Kenji-chan

Creo que el problema está  en la función M1

int matriz[100][100];

for(t=0;t<m;t++)
for(j=0;j<3;j++)

Aquí estas creando una matriz de 100 filos y 100 columnas y en el for cundo lo estas llenando

matriz[t][j]=x[k];k++;

En [][j] solo estas llenando 3 espacios dejándote con 97 espacios vacíos con valores basura
Y en [t][] estas llenando con una longitud de m elementos pero k tiene un aumento de m^3 con lo
Que sobrepasa la longitud de x[] y te da elementos inesperados

integeroverflow

Cita de: cho250425 en 19 Febrero 2017, 04:57 AM
ayuda por favor no se por que la matriz me imprime lo que debe de ser pero tambien me imprime basura :( soy nuevo en esto de programacion por favor ayuda :(


[...] code[...]


inicializa todos los elementos de la matriz a 0 antes de trabajar con ella

#include <string.h>
memset(matriz, 0, sizeof(matriz[0][0]) * 100 * 100);

naidmen

#3
No entiendo tu codigo pero creo que se debe a que si quieres llenar una matriz, no puedes hacerlo con solo un for, debe ser un for anidado, ejemplo:

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

int main()
{
int i,j,matriz[3][3];

for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("Escribe: ");
scanf("%d",&matriz[i][j]);
}
}

for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%d ",matriz[i][j]);
}
printf("\n");
}

system("pause");
return 0;
}


naidmen

Vi mejor tu código y estas creando tres vectores para llenar una matriz, si se puede pero creo que de esa forma es la menos apropiada.

valarauko

Las variables en C siempre tienen basura en la memoria, siempre tenes que recorrer el vector e inicializarlo a 0 antes de hacer algo que requiera operaciones