elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda en codigo que genera aleatorio
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda en codigo que genera aleatorio  (Leído 5,618 veces)
cacara

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Ayuda en codigo que genera aleatorio
« en: 6 Enero 2012, 05:36 am »

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:
Código
  1. int aleatorio()
  2. {
  3.    int num;
  4.    srand (time(NULL));
  5.    num = rand()%10;
  6.    return num;
  7. }

Y el programa que utiliza dicha funcion es este:
Código
  1. facil1 = aleatorio(); facil2 = aleatorio(); facil3 = aleatorio();
  2.     cout << "El numero pensado es: ";
  3.     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 Desconectado

Mensajes: 60



Ver Perfil
Re: Ayuda en codigo que genera aleatorio
« Respuesta #1 en: 6 Enero 2012, 08:18 am »

Otra vez te recomiendo googlea un poco antes de preguntar, eso es muy facil de encontrar en cualquier buscador

pon esta linea
Código:
srand((unsigned)time(NULL));


Código
  1. int aleatorio()
  2. {
  3.    int num;
  4.    num = rand()%10;
  5.    return num;
  6. }
  7.  
  8. int main()
  9. {
  10.    int facil1,facil2,facil3;
  11.    srand((unsigned)time(NULL));
  12.    facil1 = aleatorio();
  13.    facil2 = aleatorio();
  14.    facil3 = aleatorio();
  15.    cout << "El numero pensado es: ";
  16.    cout << facil1 << facil2 << facil3;
  17. }
  18.  

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 Desconectado

Mensajes: 13


Ver Perfil
Re: Ayuda en codigo que genera aleatorio
« Respuesta #2 en: 6 Enero 2012, 13:05 pm »

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 Desconectado

Mensajes: 60



Ver Perfil
Re: Ayuda en codigo que genera aleatorio
« Respuesta #3 en: 6 Enero 2012, 15:37 pm »

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 :D

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%2B
Una 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 Desconectado

Mensajes: 13


Ver Perfil
Re: Ayuda en codigo que genera aleatorio
« Respuesta #4 en: 6 Enero 2012, 15:58 pm »

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 Desconectado

Mensajes: 13


Ver Perfil
Re: Ayuda en codigo que genera aleatorio
« Respuesta #5 en: 6 Enero 2012, 16:42 pm »

Al final he hecho funcionar el getpid() solo me faltaba una libreria .h
Gracias!!
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ayuda en codigo que genera aleatorio
« Respuesta #6 en: 6 Enero 2012, 17:05 pm »

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:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define NUM_ELEM 16
  6.  
  7. int main(void)
  8. {
  9.   int num[NUM_ELEM];
  10.   int i;
  11.   int j;
  12.  
  13.   srand((unsigned) time(NULL));
  14.  
  15.   for (i = 0; i < NUM_ELEM; i++)
  16.      num[i] = i;
  17.  
  18.   /* Seleccionar los numeros en orden aleatorio */
  19.   for (i = NUM_ELEM; i > 0; i--){
  20.      j = rand() % i;
  21.      printf(" %2d", num[j]);
  22.  
  23.      num[j] = num[i - 1];
  24.   }
  25.   putchar('\n');
  26.  
  27.   return EXIT_SUCCESS;
  28. }
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 Desconectado

Mensajes: 13


Ver Perfil
Re: Ayuda en codigo que genera aleatorio
« Respuesta #7 en: 6 Enero 2012, 22:58 pm »

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


Desconectado Desconectado

Mensajes: 1.093


Ver Perfil WWW
Re: Ayuda en codigo que genera aleatorio
« Respuesta #8 en: 8 Enero 2012, 11:29 am »

Citar
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).
Código:
     v
[0123456789]
Intercambiar el digito escogido con el último del rango. Reducir el rango de dígitos válidos. Escoger otro número.
Código:
   v
[012395678]4
Intercambiar el digito escogido con el último del rango. Reducir el rango de dígitos válidos. Escoger otro número.
Código:
       v
[01839567]24
El número generado es 426.

Naturalmente escogemos un dígito del arreglo con rand().
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problemas para encontrar el codigo que genera el serial
Ingeniería Inversa
pERICOTE 4 2,625 Último mensaje 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,526 Último mensaje 1 Octubre 2010, 09:48 am
por LSL
Duda php, mysql, código aleatorio
Desarrollo Web
HORECA 3 2,410 Último mensaje 3 Diciembre 2013, 17:21 pm
por EFEX
[Ayuda] problema con libreria que genera string aleatorio
PHP
Graphixx 5 2,915 Último mensaje 26 Enero 2015, 01:17 am
por MinusFour
Ayuda! Duda de llenado aleatorio de matriz
Programación C/C++
Kihby 0 1,403 Último mensaje 11 Noviembre 2015, 02:38 am
por Kihby
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines