C/Visual C - Array de enteros aletorios

   
Vista:

Array de enteros aletorios

Publicado por Hector (4 intervenciones) el 07/11/2007 20:36:49
Hola a todos tengo un pequeño problema estoy intentando crear un array de 90 numeros aleatorios no repetidos y no se que hago mal a ver si alguien me puede ayudar aqui les dejo el codigo tal y como lo tengo que hace todo menos no repetir los numeros gracias de antemano

int bolas[89];
bool num[89];
int j = 0;
for (int q=0;q<90;q++)
num[q] = false;

for (int i = 0;i< 90;i++){
j = rand () % 91;
for ( int y=0;y<90;y++){
if(j == bolas[i])
if (num[i] == true)
j++;}

bolas[i] = j;
num[i] = true;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Array de enteros aletorios

Publicado por Hector (4 intervenciones) el 08/11/2007 19:29:44
No ahi nadie que me puede exar una mano por favor un saludo y gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Array de enteros aletorios

Publicado por Nelek (818 intervenciones) el 09/11/2007 08:04:54
En primer lugar paciencia... no todo el mundo puede contestar al momento y hay usuarios de todas las partes del mundo, por lo que el uso horario es distinto, cuando tu estas trabajando puede que otro este durmiendo.

En cuanto a tu problema.... Si quieres que los numeros aleatorios sean NO repetidos... creo que la mejor manera de hacerlo es (pongo numeros de 1 a 1000)

#define RANDOMLIMITE 1000
#define LIMITESALIDA 100

int aVectorSalida [LIMITESALIDA];
int aRandomNums [RANDOMLIMITE];

//Aqui establezco la serie de valores 1 a 1000
for (int i = 0; i < LIM; i++)
aRandomNums [i] = i + 1;

y luego usa el comando random (), para elegir posiciones aleatorias dentro de ese array.

int contador = 0;
do
{
//si no recuerdo mal el random te da valores de 0 a 1, por lo que has de
//multiplicar por el limite del rango que quieres usar
int posicion = random () * RANDOMLIMITE;

if (aRandomNums [posicion] != 0)
{
aVectorSalida [contador] = aRandomNums [posicion];
aRandomNums [posicion] = 0; //Asi ya no vuelves a usar este numero
}

//else no hace falta ya que si esa posicion no tiene un numero valido, buscas otra
}
while (contador < LIMITESALIDA)


Lo entiendes?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Array de enteros aletorios

Publicado por Hector (4 intervenciones) el 09/11/2007 11:11:49
Gracias por la ayuda Nelek despues de muxo meditar y viendo tu codigo e llegado a sacar otro creo a mi parecer algo mas facil y corto aqui lo expongo para que valoreis el codigo y muxas gracias por el interes y siento a ver sido tan impaciente pero gracias de todas formas aqui les dejo la parte del codigo que e exo basando en el tuyo

int bolas[90];
srand(time(0));
for(int i=0;i<90;i++)
{
int num = 1 + rand()%90;

if(i>0)
{
for(int j=0; j < i; j++)
if(num==bolas[j])
{
num = 1 + rand()%90;
j=-1;
}
}
bolas [ i ] =num; }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Array de enteros aletorios

Publicado por Nelek (818 intervenciones) el 09/11/2007 15:10:47
Hace lo que tu querias? Si es asi y no falla, es tan bueno o mejor que los demas.

Yo solo te di una idea, el merito es tuyo.

Solo una pregunta... por que usas rand () % 90????

rand () devuelve un valor entre 0 y 1, no? Ufff, tengo que sacar el trapo y quitarle el polvo a ciertas zonas de mi memoria :P
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Array de enteros aletorios

Publicado por Hector (4 intervenciones) el 10/11/2007 01:32:12
Bueno el rand () % 90 es para que genere numeros entre 0 y 90 asi es lo mismo que un rand() %50 genera entre 0 y 50 espero que con esto se quede solventada tu duda un saludo y gracias por tu ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Array de enteros aletorios

Publicado por Nelek (818 intervenciones) el 12/11/2007 08:41:26
No, si eso estaba claro. Lo que pasa es que yo (hace tiempo) usaba

rand () * Lim_Superior; // y el resultado lo casteaba a int para quitar los decimales

en lugar de

rand () % Lim_Superior;

Aunque, mirandolo bien... tu manera es más sencilla y más rápida.

Nunca te acostarás sin aprender una cosa más.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar