Función rand

Patxi952
01 de Diciembre del 2005
Buenas,
pues tengo un problema, a ver si me podéis ayudar.
Resulta que deseo generar números aleatorios entre 1 y 9 (rand()%9 + 1) pero quiero restringirles algunos y los que vayan saliendo de estos que no se vuelvan a repetir.

Por ejemplo en un principio quiero generar números aleatorios entre 1 y 9 menos el 5 y el 6 (1, 2, 3, 4, 7, 8 o 9). Y después según vayan saliendo que no se puedan repetir los ya salidos.

Yo Lo que hago yo es:

do
x = rand()%9 + 1
while (/*AQUÍ PONGO LOS NUMEROS QUE NO QUIERO EN UN PRINCIPIO*/)

Lo malo de esto es que puede tirarse buscando numeros que no quiero o que incluso después estén repetidos :(

Saludosss y espero vuestra ayuda ;)

kike
01 de Diciembre del 2005
Una idea es que generes el aleatorio con por ejemplo la hora del sistema, entonces lo comviertes en una cadena con itoa() y entoces uno a uno repasas los numeros en busca de uno valido.
Si no recuerdo mal creo que es srand() la que admite esto, y genera numeros de varios digitos, con lo cual aumentas la posibilidad de hallar uno valido, cabe decir que cuantos menos numeros disponibles haya, mayor es la posibilidad de retrasos, yo hice algo asi para un juego del 4 en ralla, y no solia presentar retrasos incluso cuando solo habia un resultado correcto

Patxi952
01 de Diciembre del 2005
Lo primero gracias por tu respuesta ;)

Pero no sé cómo hacerlo tal como me dices. ¿Me podrías especificar el código? Es que soy novatillo en C++ y no sé cómo planteármelo.

Saludosss ;)

kike
01 de Diciembre del 2005
mira esto

//obtener tics del procesador y fijarla como semilla de
//generacion
clock_t tic=clock();
srand(tic);
//obtener el numero generado con rand
int n=rand();

este cacho de codigo usa la funcion clock() para obtener los ciclos del procesador y guardarlos en un objeto clock_t, despues pasa este objeto a la funcion srand() para fijar un valor para generar un numero con
rand()

esto es mas simple que lo que te proponia en un principio, pero ten en cuenta que rand genera un numero a partir de aplicar un algoritmo al valor que le has especificado a srand, con lo cual si no cambia este valor te generara siempre el mismo numero, osea asegurate que ha pasado algo de tiempo entre cada vez que uses esto.