Foro de elhacker.net

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 :(

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4.  
  5. void LeerInt(int*,int*,int*,int*,char*);
  6. void M1(int*,int*,int*,int,char*);
  7.  
  8. int main(){
  9. int x[50];
  10. int x2[50];
  11. int x1[50];
  12. int d[50];
  13. int n;
  14. LeerInt(x,x1,x2,&n,"NUMERO");
  15. M1(x,x1,x2,n,"NUMERO");
  16.  
  17.  
  18. return 0;
  19. }
  20.  
  21. void LeerInt(int *x,int*x1,int*x2,int *m,char*nom){
  22. int i;
  23. int matriz[100][100];
  24. printf("\n\t elementos del  vector son: ");
  25. scanf("%i",m);
  26. for(i=0;i<*m;i++){
  27. printf("\n\t  INGRESE Los elementos del primer vector %s[%i]:", nom,i+1);
  28. scanf("%d",&x[i]);
  29. }
  30. for(i=0;i<*m;i++){
  31. printf("\n\t  INGRESE Los elementos del segundo vector %s[%i]:", nom,i+1);
  32. scanf("%d", &x1[i]);
  33. }
  34. for(i=0;i<*m;i++){
  35. printf("\n\t  INGRESE Los elementos del tercer vector %s[%i]:", nom,i+1);
  36. scanf("%d", &x2[i]);
  37. }
  38. }
  39.  
  40. void M1(int*x,int*x1,int*x2,int m,char*nom){
  41.    int t,j,k=0,z=0,i=0,l;
  42. int matriz[100][100];
  43.  
  44. for(t=0;t<m;t++)
  45. for(j=0;j<3;j++)
  46. {
  47. matriz[t][j]=x[k];k++;
  48. }
  49. for(t=0;t<m;t++)
  50. for(j=0;j<3;j++)
  51. printf("[%d]\n",matriz[t][j]);
  52.  
  53. for(t=0;t<m;t++)
  54. for(j=0;j<3;j++)
  55. {
  56. matriz[t][j]=x1[z];z++;
  57. }
  58. for(t=0;t<m;t++)
  59. for(j=0;j<3;j++)
  60. printf("[%d]\n",matriz[t][j]);
  61.  
  62. for(t=0;t<m;t++)
  63. for(j=0;j<3;j++)
  64. {
  65. matriz[t][j]=x2[i];i++;
  66. }
  67. for(t=0;t<m;t++)
  68. for(j=0;j<3;j++)
  69. printf("[%d]\n",matriz[t][j]);
  70. return;}
  71.  
  72.  
  73.  


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
Código:
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
Código:
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
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 :(

Código
  1. [...] code[...]
  2.  

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:

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int main()
  5. {
  6. int i,j,matriz[3][3];
  7.  
  8. for(i=0;i<3;i++){
  9. for(j=0;j<3;j++){
  10. printf("Escribe: ");
  11. scanf("%d",&matriz[i][j]);
  12. }
  13. }
  14.  
  15. for(i=0;i<3;i++){
  16. for(j=0;j<3;j++){
  17. printf("%d ",matriz[i][j]);
  18. }
  19. printf("\n");
  20. }
  21.  
  22. system("pause");
  23. return 0;
  24. }


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