Funcion para numeros aleatorios. Es interesante

konak
15 de Junio del 2004
Estoy haciendo un programa en el cual tengo que usar un metodo que genere numeros aleatorios entre 1 y 50. No se como hacer esto. Se que existe la funcion rand(). Pero no he podido hacer que me genere numeros aleatorios como deseo, o sea que los genere entre 1 y 50 pero que no se repitan al menos hasta que se hayan generados todos los numeros, no se si eso se podra hacer, si alguien me puede ayudar se lo agradecere mucho.

IVAN
15 de Junio del 2004
Hola .......porfavor ecesitotu funcion aleatoria ...madame a mi correo

Bass
15 de Junio del 2004
No me queda muy claro exactamente lo que deseas...

Creo que lo que quieres decir es que deseas los números del 1 al 50 mezclados.

Si es así, lo más fácil es crear un array de 50 posiciones y poner en la posicion 0 el 1, en la 1 el 2, así hasta la posicion 49 que tendrá el 50.

Después tienes que aplicar la función random_shuffle, que te mezclará los números por el array aleatoriamente.

konak
15 de Junio del 2004
si mira es una funcion que va a generar los numeos entre 1 y 50 de forma aleatoria lo mismo saca un 1 que un 30 que un 2. Pero nio quiero que se repitan hasta que se hayan generados todos. RTe agradeceria si me pudieras ayudar

noel solw
15 de Junio del 2004
Fijate si este es el programa que necesitas:

// program aleatorio.cpp
// written in borland c++ - ver 4.5

#include <iomanip.h>
#include <iomanip.h>
#include <stdlib.h>
#include <conio.h>

const int N = 50;

void Show(int *a)
{
for(int i = 0;i < N;i++)
cout << setw(5) << a[i];
cout << endl;
}


void Process(int *a)
{
randomize();
for(int i = 0;i < N;i++)
{
int index = random(N-i);
cout << setw(5) << a[index];
for(int k = index;k < N-1;k++)
a[k] = a[k+1];
}
cout << endl;
} // PROCESS

void main()
{
int a[N];
for(int i = 0;i < N;a[i++] = i);
Process(a);
cout << "end of program - good bye ! ! !" << endl;
} // MAIN

konak
15 de Junio del 2004
si mira es una funcion que va a generar los numeos entre 1 y 50 de forma aleatoria lo mismo saca un 1 que un 30 que un 2. Pero nio quiero que se repitan hasta que se hayan generados todos. RTe agradeceria si me pudieras ayudar

Bass
15 de Junio del 2004
Hombre, sacar números entre 1 y 50 es fácil: (rand()%50)+1.

Pero para que no te salgan repetidos tienes que tener una estructura que guarde qué números se han sacado ya.

Lo que yo te digo es mucho más fácil. Es meter en un array los numeros del 1 al 50, mezclarlos aleatoriamente, y cuando quieras el siguiente "número aleatorio", coges el siguiente número del array. Sería más o menos así:

int array[50];
for(int i = 0; i<50 ; i++)
{
array[i] = i+1;
}

//Ahora mezclamos el contenido:
random_shuffle(array,array+50);

Si ahora quieres sacar un nuevo "numero aleatorio sin repetir", vete recorriendo cada posicion del array desde principio a fin: estarán todos mezclados.

No se me ocurre nada más, ya que soy principiante, je je.