domingo, 31 de diciembre de 2017

Números aleatorios y probabilidades en C++

Cómo obtener la probabilidad para de manera aleatoria? Esto te podría servir para tomar ciertas decisiones en tu aplicación o sistema, como por ejemplo actualizar una barra de progreso a fin que no sean tan demandante la interacción con el UI.


Aquí algunas pruebas....

  • Para generar los números aleatorios sólo presiona la tecla [Enter].
  • Para pasar de una prueba a otra presiona la tecla [x] y presion [Enter]
En la última prueba se genera 1 y 0 y por otro lado miramos cuántos veces se generó todas las veces el valor 1 (diez veces según el ejemplo). Quiere decir que hay una probabilidad para que todas las veces salga siempre 1.


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 int xRnd = 0;
 randomize(); //stdlib.h
 do {
  std::cout << xRnd << "\n";
  xRnd = rand();
  std::cout << "Random number: " << xRnd << "\n";
  std::cout << "Random 0~99 : " << xRnd % 100 << "\n";
  xRnd = std::getchar();
 } while (xRnd!=120);  //120 = tecla x

 Randomize();  //System.hpp
 do {
  std::cout << xRnd << "\n";
  xRnd = Random(100);
  std::cout << "Random 0~99 : " << xRnd << "\n";
  xRnd = std::getchar();
 } while (xRnd!=120);

 int Tot=0, TotTot=0;
 do {
  //std::cout << xRnd << "\n";
  int Cnt= 0;
  for (int i = 0; i < 10; i++) {
   xRnd = Random(2); //0 ó 1
   //std::cout << i << ": " << xRnd << "\n";
   if (xRnd==1) Cnt++;
  }

  TotTot++;
  if (Cnt>7) {  //70% de probabilidad
   Tot++;
   std::cout << "Prob. del 70% alcanzada.\n";
   std::cout << "Prob.: " << Tot*100.0/TotTot << "% - " << Tot << "/" << TotTot << "\n";
   xRnd = std::getchar();
   Tot= 0;
   TotTot= 0;
  }
 } while (xRnd!=120);
 return 0;

En el último do-while...
Se está buscando coincidencias donde la probabilidad haya sido igual o mayor a siete (70%).

TotTot muestra la frecuencia con que la condición del párrafo anterior, o de la línea 30, ocurre... ésta también es una probabilidad.

En un siguiente post quizás (no estoy seguro si lo haré) verifique este TotTot en los dos primeras do-while.

Feliz Año 2018!!!
Cheers!