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 ..
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!
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.
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;
}
El codigo es muy ingenioso... Ya que inicializa la matriz a 0 y luego en:
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. :)
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.. ;-)