Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: AlbertoBSD en 29 Agosto 2016, 18:36 pm



Título: Sorteo/Loteria Simulaciones y cambios de Variable
Publicado por: AlbertoBSD en 29 Agosto 2016, 18:36 pm
El siguiente codigo simula un Sorteo/Loteria 10 Millones de veces tomando 30 muestras de estas simulaciones obtenemos un Valor de veces que se gano el sorteo.

El jugador elige un numero y en cada ciclo se sortean otro Numero si el numero es igual al del jugador este GANA.


Se realizan 2 Tipos de Sorteos:

  • Uno donde el jugador conserva el MISMO numero todas las simulaciones.
  • El otro donde el jugador CAMBIA el numero en cada simulación

Salida Obtenida en 4 ejecuciones:

Código:
Total de veces ganador CON cambio de Variable 30636/(300000000 Sorteos)
Total de veces ganador SIN cambio de Variable 27675/(300000000 Sorteos)
Total de veces ganador CON cambio de Variable 30396/(300000000 Sorteos)
Total de veces ganador SIN cambio de Variable 36592/(300000000 Sorteos)
Total de veces ganador CON cambio de Variable 30700/(300000000 Sorteos)
Total de veces ganador SIN cambio de Variable 36890/(300000000 Sorteos)
Total de veces ganador CON cambio de Variable 30635/(300000000 Sorteos)
Total de veces ganador SIN cambio de Variable 27460/(300000000 Sorteos)

Si Observamos en total son 300 Millones de simulaciones 2 veces en cada ejecución, si vemos el "promedio" se mantiene mas o menos constante cuando SI CAMBIA la variable.

y el "promedio" se varia entre ejecuciones cuando NO CAMBIA la variable.

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4.  
  5. #define MUESTRAS 30
  6. #define SIMULACIONES 10000000
  7. #define MAX 60000
  8.  
  9. int main() {
  10. register int i = 0,j = 0;
  11.  
  12. int elegido,premio, contador = 0;
  13. srand(time(NULL));
  14.  
  15. //Sorteos con cambio de Variable
  16. j = 0;
  17. while(j < MUESTRAS){
  18. i = 0;
  19. while(i < SIMULACIONES) {
  20. elegido = rand() % MAX; // La variable elegida cambia en cada sorteo
  21. premio = rand() % MAX;
  22. if(elegido == premio) {
  23. contador++;
  24. }
  25. i++;
  26. }
  27. j++;
  28. }
  29. printf("Total de veces ganador CON cambio de Variable %i/(%i Sorteos)\n",contador,MUESTRAS*SIMULACIONES);
  30.  
  31.  
  32. //Sorteos SIN cambio de Variable
  33. j = 0;
  34. elegido = rand() % MAX; // La variable no cambia
  35. contador = 0;
  36. while(j < MUESTRAS){
  37. i = 0;
  38. while(i < SIMULACIONES) {
  39. premio = rand() % MAX;
  40. if(elegido == premio) {
  41. contador++;
  42. }
  43. i++;
  44. }
  45. j++;
  46. }
  47. printf("Total de veces ganador SIN cambio de Variable %i/(%i Sorteos)\n",contador,MUESTRAS*SIMULACIONES);
  48. return 0;
  49. }

Esto va de la mano con la siguiente pregunta:

¿Es bueno cambiar siempre de variable?

Tema relacionado:

Demostracion del problema de Monty Hall (http://foro.elhacker.net/programacion_cc/demostracion_del_problema_de_monty_hall-t456303.0.html)

Saludos


Título: Re: Sorteo/Loteria Simulaciones y cambios de Variable
Publicado por: Poyoncio en 29 Agosto 2016, 23:16 pm
Me parecen muy interesantes estos pequeños (que yo por lo menos tardaria un dia en realizar) programas para comprobar teorias, lastima que aun me falte un poco de nivel para comprender el codigo al 100%, espero que pronto te pueda seguir el ritmo jeje :P

PD Por lo que he entendido y visto en la ejecucion del programa, diria que se tienen mas probabilidades si se cambian de variables.


Saludos! ;)