Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: binaryum en 19 Julio 2010, 14:58 pm



Título: llenar matriz con Random en Dev C
Publicado por: binaryum en 19 Julio 2010, 14:58 pm
Hola amigos, que tal ? ... soy nuevo en este foro y me parece espectacular ! ;-)

Bueno tengo una duda , necesito hacer un tipo de "puzzle con numeros" , con matrices (o arreglos bidimensionales) ,y utilizo el random para llenar la matriz pero me repite los numeros .. que se haria en ese caso para que no me repita los numeros  ?  (ojo : ya tengo la semilla ).

 les agradezco Que me ayuden

Les dejo un pedazo de codigo que hice :

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define TAM 12
main ()
{
  srand (time (NULL));
 int M[TAM][TAM];
 
 int i,x,alo;
 int filas,columnas,a=0,temp;
 printf ("Introduzca el numero de filas : ");
 scanf ("%d",&filas);
 printf ("\nIntroduzca el numero de columnas : ");
 scanf  ("%d",&columnas);
 temp = filas*columnas;
 
 for (i = 0;i<filas;i++)
 {
    printf ("\n");
     
     for (x =0;x<columnas;x++)
     {
       alo = rand () % temp;
       a = alo;
       M
  • =a;
        printf ("%4d",M
  • );
     }
     printf ("\n");
 }
getch ();
}

Ahí esta, mi idea es que recorra la matriz y si un numero esta repetido que cree  otro aleatorio hasta que no sea igual y ese sea el que asigne..

Gracias de antemano amigos programadores ..


Título: Re: llenar matriz con Random en Dev C
Publicado por: Og. en 19 Julio 2010, 18:41 pm
1.- usa geshi
2.- usas librerias inecesarias para tu codigo (conio y stdlib)
3.- no defines el tipo de retorno de la funcion main
4.-intenta asi:
Código
  1. #include <stdio.h>
  2. #include <time.h>
  3. int main(void)
  4. {
  5. int y, x, i, g, temp, filas, columnas;
  6.  
  7. srand (time (NULL));
  8.  
  9. printf ("Introduzca el numero de filas : ");
  10. scanf ("%i",&filas);
  11. printf ("\nIntroduzca el numero de columnas : ");
  12. scanf  ("%i",&columnas);
  13.  
  14. int matriz[filas][columnas];
  15. temp = filas*columnas;
  16.  
  17. for(i=0; i<filas; i++)
  18.  for(g=0; g<columnas; g++)
  19.   matriz[i][g] = 0;
  20.  
  21. for(i=1; i<=temp; i++)
  22. {
  23.  do
  24.  {
  25.   y = rand() % filas;
  26.   x = rand() % columnas;
  27.  }while(matriz[y][x]);
  28.  matriz[y][x] = i;
  29. }
  30.  
  31. for(i=0; i<filas; i++)
  32. {
  33.  for(g=0; g<columnas; g++)
  34.    printf("%i\t", matriz[i][g]);
  35.  printf("\n");
  36. }
  37. return 0;
  38. }

Saludos!


Título: Re: llenar matriz con Random en Dev C
Publicado por: leogtz en 19 Julio 2010, 20:35 pm
1.- usa geshi
2.- usas librerias inecesarias para tu codigo (conio y stdlib)
3.- no defines el tipo de retorno de la funcion main
4.-intenta asi:
Código
  1. #include <stdio.h>
  2. #include <time.h>
  3. int main(void)
  4. {
  5. int y, x, i, g, temp, filas, columnas;
  6.  
  7. srand (time (NULL));
  8.  
  9. printf ("Introduzca el numero de filas : ");
  10. scanf ("%i",&filas);
  11. printf ("\nIntroduzca el numero de columnas : ");
  12. scanf  ("%i",&columnas);
  13.  
  14. int matriz[filas][columnas];
  15. temp = filas*columnas;
  16.  
  17. for(i=0; i<filas; i++)
  18.  for(g=0; g<columnas; g++)
  19.   matriz[i][g] = 0;
  20.  
  21. for(i=1; i<=temp; i++)
  22. {
  23.  do
  24.  {
  25.   y = rand() % filas;
  26.   x = rand() % columnas;
  27.  }while(matriz[y][x]);
  28.  matriz[y][x] = i;
  29. }
  30.  
  31. for(i=0; i<filas; i++)
  32. {
  33.  for(g=0; g<columnas; g++)
  34.    printf("%i\t", matriz[i][g]);
  35.  printf("\n");
  36. }
  37. return 0;
  38. }

Saludos!

Faltó la inclusión de stdlib.h, no debería compilar.


Título: Re: llenar matriz con Random en Dev C
Publicado por: binaryum en 20 Julio 2010, 01:34 am
1.- usa geshi
2.- usas librerias inecesarias para tu codigo (conio y stdlib)
3.- no defines el tipo de retorno de la funcion main
4.-intenta asi:
Código
  1. #include <stdio.h>
  2. #include <time.h>
  3. int main(void)
  4. {
  5. int y, x, i, g, temp, filas, columnas;
  6.  
  7. srand (time (NULL));
  8.  
  9. printf ("Introduzca el numero de filas : ");
  10. scanf ("%i",&filas);
  11. printf ("\nIntroduzca el numero de columnas : ");
  12. scanf  ("%i",&columnas);
  13.  
  14. int matriz[filas][columnas];
  15. temp = filas*columnas;
  16.  
  17. for(i=0; i<filas; i++)
  18.  for(g=0; g<columnas; g++)
  19.   matriz[i][g] = 0;
  20.  
  21. for(i=1; i<=temp; i++)
  22. {
  23.  do
  24.  {
  25.   y = rand() % filas;
  26.   x = rand() % columnas;
  27.  }
  28.  while(matriz[y][x]);
  29.  matriz[y][x] = i;
  30. }
  31.  
  32. for(i=0; i<filas; i++)
  33. {
  34.  for(g=0; g<columnas; g++)
  35.    printf("%i\t", matriz[i][g]);
  36.  printf("\n");
  37. }
  38. return 0;
  39. }

Saludos!

Oyeme gracias me sirvio mucho ,  (aunque tuve que hacer ligeros cambios para que pudiera compilar en Dev c++) , pero esta buenisimo !!! gracias otra ves .  ;-)

Por cierto me podrias explicar que hace este codigo que no lo entiendo muy bien

Código
  1. for(i=1; i<=temp; i++)
  2. {
  3.  do
  4.  {
  5.   y = rand() % filas;
  6.   x = rand() % columnas;
  7.  }
  8.  while(matriz[y][x]);
  9.  matriz[y][x] = i;
  10. }
  11.  
  12.  


Título: Re: llenar matriz con Random en Dev C
Publicado por: .:BlackCoder:. en 20 Julio 2010, 01:49 am
El codigo es muy ingenioso... Ya que inicializa la matriz a 0 y luego en:
Código
  1.  do
  2.  {
  3.   y = rand() % filas;
  4.   x = rand() % columnas;
  5.  }
  6.  while(matriz[y][x]);

Lo que hace es darle valores aleatorios a x e y... Pero no sale del do while si matriz[y]
  • tiene un valor distinto de 0... Al tener el valor 0 si sale y le da el valor de la variable del for... En el while, la condicion es que haya un valor en matriz[y]
  • distinto de 0... Es por eso que si tiene un valor de 0 sale y asigna el valor de i...

Saludos... Muy chevere el codigo Og.  :)



Título: Re: llenar matriz con Random en Dev C
Publicado por: MIG80 en 20 Julio 2010, 04:26 am
Código
  1. temp=filas*columnas;
  2. ...
  3. for(i=1;i<=temp;i++)
  4. {
  5.  do
  6.  {
  7.     y = rand() % filas;
  8.     x = rand() % columnas;
  9.  } while(matriz[y][x]);
  10.  matriz[y][x]=i;
  11. }
  12.  
Excelente.. ;-)