Autor
|
Tema: Ayuda en codigo que genera aleatorio (Leído 6,242 veces)
|
cacara
Desconectado
Mensajes: 13
|
El problema es que necesito generar 3 numeros aleatorios a la vez para que salgan los tres juntos y al esta srand() definido por la hora del ordenador, salen iguales, alguien sabe que mas valores puede tomar srand() aparte de srand(time(NULL)) para que salieran aleatorios casi puros? El codigo de la funcion que manda aleatorio es este: int aleatorio() { int num; srand (time(NULL)); num = rand()%10; return num; }
Y el programa que utiliza dicha funcion es este: facil1 = aleatorio(); facil2 = aleatorio(); facil3 = aleatorio(); cout << "El numero pensado es: "; cout << facil1 << facil2 << facil3;
Lo que necesito es que cada variable facil1, facil2 y facil3, guarden un valor aleatorio distinto para mostrar luego en pantalla los tres juntos como si fuera un numero de 3 cifras, que generar uno aleatorio de 3 cifras no me vale. Muchas Gracias De Antemano!!!
|
|
|
En línea
|
|
|
|
KaL3o
Desconectado
Mensajes: 60
|
Otra vez te recomiendo googlea un poco antes de preguntar, eso es muy facil de encontrar en cualquier buscador pon esta linea srand((unsigned)time(NULL)); int aleatorio() { int num; num = rand()%10; return num; } int main() { int facil1,facil2,facil3; srand((unsigned)time(NULL)); facil1 = aleatorio(); facil2 = aleatorio(); facil3 = aleatorio(); cout << "El numero pensado es: "; cout << facil1 << facil2 << facil3; }
Espero te sirva Salu2
|
|
« Última modificación: 6 Enero 2012, 15:26 pm por KaL3o »
|
En línea
|
Todos los caminos se vuelven a juntar. Pero nunca de la misma forma.
|
|
|
cacara
Desconectado
Mensajes: 13
|
Ya he probado eso, es mas, eso lo probe antes de poner el que tenia ahora y sigue generando los 3 numeros iguales. Y si he buscado demasiado y la unica opcion que me sale es esa, en caso de no haber forma de generar un aleatorio casi puro, no se le pueden poner mas opciones dentro de srand en vez de time(NULL)??
|
|
« Última modificación: 6 Enero 2012, 13:46 pm por cacara »
|
En línea
|
|
|
|
KaL3o
Desconectado
Mensajes: 60
|
Si lo hubieras probado te darias cuenta que el codigo SI genera los números aleatorios. Una cosa es leer, observar, y probar... otra muy distinta es asumir que se te ha escrito lo que ya tenias. Con respecto a tu pregunta la respuesta es si, si se puede poner otras opciones dentro de srand, Espero encuentres mas info en google, bing, blekko, yahoo, o algun buscador. Busca GetTickTime para windows o clock_gettime(CLOCK_MONOTONIC, &tp) en linux. Claro que hay algo que agregar en el header, pero la idea es que lo puedas investigar Aunque una solucion a lo que buscas ya la tienes, relee lo ya expuesto y mira en que se diferencia de lo que ya tienes. Y lo de buscar alternativas me parece genial. Asi que animo!!! Por ultimo te dejo este link http://lmgtfy.com/?q=srand+c%2B%2BUna buena señal es que no pidio el codigo hecho Salu2
|
|
|
En línea
|
Todos los caminos se vuelven a juntar. Pero nunca de la misma forma.
|
|
|
cacara
Desconectado
Mensajes: 13
|
Ahh vale muchas gracias entonces es que ayer me pase buscando horas y lo unico que encontre era time(NULL) y getpid() y si observando bien el codigo si se diferencia del mio y funciona, y una cosita mas hay algo facil para hacer que ninguno de los numeros generados sean iguales? Porque aveces sale por ejemplo 778 o 655 porque lo unico que se me ocurre es poner sentencias IF comparando uno con el anterior y si es igual, que lo vuelva a generar.
Muchas gracias!!
|
|
« Última modificación: 6 Enero 2012, 16:03 pm por cacara »
|
En línea
|
|
|
|
cacara
Desconectado
Mensajes: 13
|
Al final he hecho funcionar el getpid() solo me faltaba una libreria .h Gracias!!
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
una cosita mas hay algo facil para hacer que ninguno de los numeros generados sean iguales? Porque aveces sale por ejemplo 778 o 655 porque lo unico que se me ocurre es poner sentencias IF comparando uno con el anterior y si es igual, que lo vuelva a generar. En C estándar no hay forma de garantizar que los números no se repitan, eso debe hacerse de forma manual ya sea comparando con los ya generados (como comentas) o bien, si el rango de números es pequeño, almacenando estos en un array y seleccionando (generando el indice) de forma aleatoria. Por ejemplo: #include <stdio.h> #include <stdlib.h> #include <time.h> #define NUM_ELEM 16 int main(void) { int num[NUM_ELEM]; int i; int j; for (i = 0; i < NUM_ELEM; i++) num[i] = i; /* Seleccionar los numeros en orden aleatorio */ for (i = NUM_ELEM; i > 0; i--){ num[j] = num[i - 1]; } return EXIT_SUCCESS; }
Por supuesto ello no sirve si el rango de valores es significativo. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
cacara
Desconectado
Mensajes: 13
|
Ok muchisimas gracias, al final he optado por el getpid() que de momento con todas las pruebas que he hecho no me ha generado ninguno tipo 778 o 255 y si no creo que optare por poner las sentencias IF pero como ya he dicho de momento ningun problema, Gracas!!
|
|
|
En línea
|
|
|
|
SirLanceCC
|
al final he optado por el getpid() que de momento con todas las pruebas que he hecho no me ha generado ninguno tipo 778 o 255 Eso no te garantiza para nada que en algún momento no te vaya a salir uno de esos números repetidos. [tecnicismo] De hecho en una distribución aleatoria uniforme los números se pueden repetir por que cada número tiene siempre la misma probabilidad de salir. [/tecnicismo] Una posible solución es la siguiente: Tener un arreglo de dígitos (no importa el orden, así que lo más fácil es generarlos en orden). Escoger un dígito válido (los que están en corchetes). Intercambiar el digito escogido con el último del rango. Reducir el rango de dígitos válidos. Escoger otro número. Intercambiar el digito escogido con el último del rango. Reducir el rango de dígitos válidos. Escoger otro número. El número generado es 426. Naturalmente escogemos un dígito del arreglo con rand().
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problemas para encontrar el codigo que genera el serial
Ingeniería Inversa
|
pERICOTE
|
4
|
2,881
|
9 Abril 2005, 21:14 pm
por 4rS3NI(
|
|
|
AYUDA CON SERIAL QUE SE GENERA A PARTIR DEL NUMERO DE LA PC
Ingeniería Inversa
|
isaiaschiri
|
1
|
2,733
|
1 Octubre 2010, 09:48 am
por LSL
|
|
|
Duda php, mysql, código aleatorio
Desarrollo Web
|
HORECA
|
3
|
2,618
|
3 Diciembre 2013, 17:21 pm
por EFEX
|
|
|
[Ayuda] problema con libreria que genera string aleatorio
PHP
|
Graphixx
|
5
|
3,160
|
26 Enero 2015, 01:17 am
por MinusFour
|
|
|
Ayuda! Duda de llenado aleatorio de matriz
Programación C/C++
|
Kihby
|
0
|
1,567
|
11 Noviembre 2015, 02:38 am
por Kihby
|
|