pregunta!!leer por favor!!

desi
17 de Junio del 2006
estoy haciendo el juego master mind(pero con letras) y necesito que el ordenador haga una secuencia de 4 letras aleatoriamente. se que se hace con "random" , pero no se como utilizarlo. me lo podrian decir.. gracias de verdad

hiei
17 de Junio del 2006
En la pagina:
http://maconlinux.net/linux-man-pages/es/random.3.html
tienes una descripcion completa (mas de lo que uno quisiera) de random y rand y todas las funciones asociadas... son de la libreria C de Linux, pero sirven igual para random y rand porque sigen el estandar POSIX...
La idea de random es que debuelve un numero entero dentro de un rango que va desde 0 a algun numero que depende del sistema (normalmente muy pero muy muy muy grande, lo suficiente como para no preocuparte) Asi que para sacar un numero aleatorio entre A y B deverias hacer:
aleatorio = (A+random())%B;
El % hace que el numero debuelto por random (y sumado a A) no pase de B...
Para que sea de verdad aleatorio deverias inicar tu programa con standom pasandole una semilla (usada despues por el generador de numeros aleatorios) algo como:
srandom( clock() );
Que inicia el generador con el tick actual del reloj del sistema...
Otro juego de funciones que puedes usar son rand y srand:
http://maconlinux.net/linux-man-pages/es/rand.3.html
Que basicamente hacen lo mismo pero son ANSI C y no POSIX (los estandares que rigen C y UNIX) Si es ANSI C es mas probable que este en tu compilador sea cual sea...

El problema de no llamar a srandom o srand es que siempre que inicie tu programa se repetira la misma secuencia, porque random (o rand) usa el numero 1 como semilla predeterminada si no se hace esto... asi que siempre sera el mismo la primera vez...

Otro truco es llamar a srandom (srand) en varias partes de tu programa con distintos parametros (la direccion de una variable sacada con "(int)(&variable)", el tick actual con "clock()", o algo mas retorcido como srandom( clock()+random()+(int)(&var) ); o cualquier otro valor que cambie mucho en tu programa...)

Saludos y suerte... si hay mas dudas, pregunta.