Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Sr_Malweriks en 4 Enero 2016, 23:17 pm



Título: Probabilidad de que salga un numero aleatorio
Publicado por: Sr_Malweriks en 4 Enero 2016, 23:17 pm
Saludos!, terminando un proyecto en mente que llevo trabajando desde hace mucho tiempo, se me ocurrió la idea de realizar un módulo en el que escriba, dentro de una matriz (una casilla que no esté ocupada y aleatoria), un numero aleatorio ( 2 o 4) con una probabilidad de que salga el 2 en otro parámetro, no sé si me he explicado bien xD.

De momento llevo escrito esto:
Código
  1.  
  2. void poner_valor_aleatorio(tablero &t, int prob){
  3. //VARIABLES
  4. int ale;
  5. srand(time(NULL)); //cambiamos el valor de la semilla
  6.  
  7.        //Condición para que salga 2 o 4 (inicialmente con un 50 %):
  8. ale = rand()%2;
  9. if (ale == 0)
  10. ale = 2;
  11. if (ale == 1)
  12. ale = 4;
  13.  
  14.    //TO DO
  15. // Para hacer referencia a una casilla se utiliza t.matriz[fila][columna]
  16.    // generar la probabilidad (de que salga el 2) introducido como parametro y
  17. // colocar ese numero en una casilla vacia aleatoria del tablero.
  18. // Tengo dos modulos creados:
  19. /*
  20. * casilla_vacia(tablero &t, int fila, int columna)  Devuelve false si está llena true si no.
  21. * poner_valor(tablero &t, int fila, int columna, int valor) Coloca el valor en esa casilla.
  22. *
  23. *
  24. */
  25.  
  26.  
  27.  
  28.  
  29.  
  30. }
  31.  
  32.  
  33.  
  34.  

La parte // TO DO es la que no consigo sacarlo, he pensado mil formas y no soy capaz....
¿Alguien puede echarme una manita? :D


Título: Re: Probabilidad de que salga un numero aleatorio
Publicado por: JavierScars en 5 Enero 2016, 01:47 am
Yo quizás te pueda ayudar pero... No entendí...


Título: Re: Probabilidad de que salga un numero aleatorio
Publicado por: MAFUS en 5 Enero 2016, 02:27 am
Entiendo que, en un tablero quieres llenar las casillas vacías aleatoriamente con números aleatorios y quieres forzar la probabilidad de que salga un número concreto.


Título: Re: Probabilidad de que salga un numero aleatorio
Publicado por: Wick3D en 5 Enero 2016, 02:44 am
Pero.....si estás intentando forzar la salida de un número "aleatorio", entonces ya no es aletorio(?), creo que no lo entiendo tampoco mucho.


Título: Re: Probabilidad de que salga un numero aleatorio
Publicado por: Sr_Malweriks en 5 Enero 2016, 18:44 pm
Entiendo que, en un tablero quieres llenar las casillas vacías aleatoriamente con números aleatorios y quieres forzar la probabilidad de que salga un número concreto.
Exacto, la idea es, teniendo un tablero (vacio), se vayan rellenando las casillas (de forma aleatoria), es decir, perimero casilla (3,3), luego (2,1) (POR EJEMPLO), siempre y cuando esté vacía.

Ese valor que se quiere introducir en la casilla tiene que ser 2 o 4 (es decir, dos valores aleatorios) pero tambien se debe de incluir un numero que hace referencia al procentaje de posibilidad de que salga el 2. Me explico:

- Si pongo 50 (será un 50%) es decir, la probabilidad de que se ponga un 2 o un 4 es igual.
- Si pongo un 25 (será un 25%) es decir, la probabilidad de que salga un 2 será menor de que salga un 4.
- Si pongo un 80 (será un 80%) es decir, la probabilidad de que salga un 2 será mucho mayor de que salga el 4.

En conclusión, cuando ejecute el modulo, añadirá un 2 o un 4 (dependiendo del parámetro de probabilidad) dentro de una casilla aleatoria del tablero.


Título: Re: Probabilidad de que salga un numero aleatorio
Publicado por: ivancea96 en 5 Enero 2016, 21:56 pm
Siendo así:
Código
  1. if(rand()%100 < prob)
  2.    ale = 2;
  3. else
  4.    ale = 4;


Título: Re: Probabilidad de que salga un numero aleatorio
Publicado por: Sr_Malweriks en 5 Enero 2016, 22:40 pm
Joder, pues es verdad, no había caido en eso....madre mia que empanao soy, gracias :D



Siendo así:
Código
  1. if(rand()%100 < prob)
  2.    ale = 2;
  3. else
  4.    ale = 4;

Por cierto, no sería <= prob ?


Título: Re: Probabilidad de que salga un numero aleatorio
Publicado por: 0xFer en 7 Enero 2016, 18:56 pm
Citar
Por cierto, no sería <= prob ?

rand()%100 genera un número en [0,99], Si por ejemplo 'prob' es 50 entonces nos interesa un número en [0,49] o sea un número menor que 50.


Título: Re: Probabilidad de que salga un numero aleatorio
Publicado por: ivancea96 en 7 Enero 2016, 20:10 pm
Por cierto, no sería <= prob ?

A parte de la explicación teórica de 0xFer:

En estos cosas, la mejor forma de comprobarlo con exactitud, es probar <mentalmente>, los casos más extremos.
Por ejemplo, el 0. Si la probabilidad es de 0, da igual qué número salga, que no puede salir N<0. Sin embargo, si se hubiera puesto N<=0, sí habría una posibilidad.
Luego con el 100, tienes una prueba parecida xD