Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kropt32 en 2 Agosto 2010, 14:47 pm



Título: Números Aleatorios
Publicado por: Kropt32 en 2 Agosto 2010, 14:47 pm
Me gustaría generar números aleatorios. Todos los manuales para crear números aleatorios utilizan la hora y fecha actual como semilla aleatoria. ¿Alguien puede explicarme como funciona esa semilla?¿Son realmente aleatorios los números que se generan a partir de esa semilla?Si no son ¿Se puede hacer de alguna manera para que los numeros generados tengan el 50% de probabilidad (si son dos), (33.3% si son tres) ,etc.?

Si quiero generar números aleatorios entre 0 y 2 ambos inclusive:
Al 0 se le da 33.3% de probabilidad
Al 1 otro 33.3%
Al 2 otro 33.3%

¿Me explico?


Título: Re: Números Aleatorios
Publicado por: fary en 2 Agosto 2010, 17:33 pm
Ahi tienes informacion de la msdn:

http://msdn.microsoft.com/en-us/library/398ax69y%28v=VS.71%29.aspx

Realmente No son aleatorios del todo, como tu bien dijiste tiene que ver con la hora o con la fechao con cualquier otro numero...

No se podria hacer porcentaje... hombre si usaras ifs y tal podrias sacar algo descartando numeros, pero como ya dije, descartando.

salu2!


Título: Re: Números Aleatorios
Publicado por: do-while en 2 Agosto 2010, 20:43 pm
¡Buenas!

A ver si este codigo responde a tu pregunta:
Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. #define DIM 3
  5. #define NUM_MUESTRAS 6
  6.  
  7. void frecuencias(int repeticiones)
  8. {
  9.    int i , frecuencias[DIM] = {0};
  10.  
  11.    for(i = 0 ; i < repeticiones ; i++)
  12.    {
  13.        ++frecuencias[rand() % DIM];
  14.    }
  15.  
  16.  
  17.    printf("%d REPETICIONES\n-------------------------------------------\n",repeticiones);
  18.  
  19.    for(i = 0 ; i < DIM ; i++)
  20.    {
  21.        printf("%d - %02.2f%%\n", i , 100 * ((float)frecuencias[i]) / repeticiones);
  22.    }
  23.    printf("\n");
  24.  
  25.    return;
  26. }
  27.  
  28. int main(int argc, char *argv[])
  29. {
  30.    int i , rep = 10;
  31.  
  32.    for(i = 0 ; i < NUM_MUESTRAS ; i++)
  33.    {
  34.        frecuencias(rep);
  35.        rep *= 10;
  36.    }
  37.  
  38.    getchar();
  39.  
  40.    return 0;
  41. }
  42.  
  43.  

Cuando no sepas que hace algo, experimenta, aprenderas mas y descubriras como funcionan las cosas.

¡Saludos!