Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: cho250425 en 19 Febrero 2017, 04:57 AM

Título: matriz imprime basura
Publicado por: 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 :(

#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;}


Título: Re: matriz imprime basura
Publicado por: Kenji-chan en 19 Febrero 2017, 22:47 PM
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
Título: Re: matriz imprime basura
Publicado por: integeroverflow en 24 Febrero 2017, 22:53 PM
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);
Título: Re: matriz imprime basura
Publicado por: naidmen en 26 Febrero 2017, 18:32 PM
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;
}

Título: Re: matriz imprime basura
Publicado por: naidmen en 26 Febrero 2017, 18:39 PM
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.
Título: Re: matriz imprime basura
Publicado por: valarauko en 28 Febrero 2017, 23:08 PM
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