llenar matriz con Random en Dev C

Iniciado por binaryum, 19 Julio 2010, 14:58 PM

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

binaryum

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 ..

Og.

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:
#include <stdio.h>
#include <time.h>
int main(void)
{
int y, x, i, g, temp, filas, columnas;

srand (time (NULL));

printf ("Introduzca el numero de filas : ");
scanf ("%i",&filas);
printf ("\nIntroduzca el numero de columnas : ");
scanf  ("%i",&columnas);

int matriz[filas][columnas];
temp = filas*columnas;

for(i=0; i<filas; i++)
 for(g=0; g<columnas; g++)
  matriz[i][g] = 0;

for(i=1; i<=temp; i++)
{
 do
 {
  y = rand() % filas;
  x = rand() % columnas;
 }while(matriz[y][x]);
 matriz[y][x] = i;
}

for(i=0; i<filas; i++)
{
 for(g=0; g<columnas; g++)
   printf("%i\t", matriz[i][g]);
 printf("\n");
}
return 0;
}


Saludos!
|-

leogtz

Cita de: 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:
#include <stdio.h>
#include <time.h>
int main(void)
{
int y, x, i, g, temp, filas, columnas;

srand (time (NULL));

printf ("Introduzca el numero de filas : ");
scanf ("%i",&filas);
printf ("\nIntroduzca el numero de columnas : ");
scanf  ("%i",&columnas);

int matriz[filas][columnas];
temp = filas*columnas;

for(i=0; i<filas; i++)
  for(g=0; g<columnas; g++)
   matriz[i][g] = 0;

for(i=1; i<=temp; i++)
{
  do
  {
   y = rand() % filas;
   x = rand() % columnas;
  }while(matriz[y][x]);
  matriz[y][x] = i;
}

for(i=0; i<filas; i++)
{
  for(g=0; g<columnas; g++)
    printf("%i\t", matriz[i][g]);
  printf("\n");
}
return 0;
}


Saludos!

Faltó la inclusión de stdlib.h, no debería compilar.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

binaryum

Cita de: 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:
#include <stdio.h>
#include <time.h>
int main(void)
{
int y, x, i, g, temp, filas, columnas;

srand (time (NULL));

printf ("Introduzca el numero de filas : ");
scanf ("%i",&filas);
printf ("\nIntroduzca el numero de columnas : ");
scanf  ("%i",&columnas);

int matriz[filas][columnas];
temp = filas*columnas;

for(i=0; i<filas; i++)
 for(g=0; g<columnas; g++)
  matriz[i][g] = 0;

for(i=1; i<=temp; i++)
{
 do
 {
  y = rand() % filas;
  x = rand() % columnas;
 }
  while(matriz[y][x]);
 matriz[y][x] = i;
}

for(i=0; i<filas; i++)
{
 for(g=0; g<columnas; g++)
   printf("%i\t", matriz[i][g]);
 printf("\n");
}
return 0;
}


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


for(i=1; i<=temp; i++)
{
  do
  {
   y = rand() % filas;
   x = rand() % columnas;
  }
  while(matriz[y][x]);
  matriz[y][x] = i;
}


.:BlackCoder:.

El codigo es muy ingenioso... Ya que inicializa la matriz a 0 y luego en:
Código (cpp) [Seleccionar]
  do
  {
   y = rand() % filas;
   x = rand() % columnas;
  }
  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.  :)

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja




MIG80

#5
Código (cpp) [Seleccionar]

temp=filas*columnas;
...
for(i=1;i<=temp;i++)
{
  do
  {
     y = rand() % filas;
     x = rand() % columnas;
  } while(matriz[y][x]);
  matriz[y][x]=i;
}

Excelente.. ;-)