Probabilidad de que salga un numero aleatorio

Iniciado por Sr_Malweriks, 4 Enero 2016, 23:17 PM

0 Miembros y 1 Visitante están viendo este tema.

Sr_Malweriks

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 (cpp) [Seleccionar]


void poner_valor_aleatorio(tablero &t, int prob){
//VARIABLES
int ale;
srand(time(NULL)); //cambiamos el valor de la semilla

        //Condición para que salga 2 o 4 (inicialmente con un 50 %):
ale = rand()%2;
if (ale == 0)
ale = 2;
if (ale == 1)
ale = 4;

    //TO DO
// Para hacer referencia a una casilla se utiliza t.matriz[fila][columna]
    // generar la probabilidad (de que salga el 2) introducido como parametro y
// colocar ese numero en una casilla vacia aleatoria del tablero.
// Tengo dos modulos creados:
/*
* casilla_vacia(tablero &t, int fila, int columna)  Devuelve false si está llena true si no.
* poner_valor(tablero &t, int fila, int columna, int valor) Coloca el valor en esa casilla.
*
*
*/





}





La parte // TO DO es la que no consigo sacarlo, he pensado mil formas y no soy capaz....
¿Alguien puede echarme una manita? :D
"Mientras tu duermes, hay otra persona en otro lugar del planeta trabajando para ser mejor en lo que tu quieres llegar a ser"

JavierScars

Yo quizás te pueda ayudar pero... No entendí...
Usa lo malo de la vida a tu favor, escala montañas de problemas para deslizarte sobre soluciones, derrumba muros de decepciones para encontrar la libertar de la felicidad,  y quema la leña del fracaso para calentarte con el éxito. Recuerda que sin la oscuridad la luz no brillaría tanto.

MAFUS

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.

Wick3D

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.

Sr_Malweriks

Cita de: 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.
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.
"Mientras tu duermes, hay otra persona en otro lugar del planeta trabajando para ser mejor en lo que tu quieres llegar a ser"

ivancea96

Siendo así:
if(rand()%100 < prob)
    ale = 2;
else
    ale = 4;

Sr_Malweriks

#6
Joder, pues es verdad, no había caido en eso....madre mia que empanao soy, gracias :D




Cita de: ivancea96 en  5 Enero 2016, 21:56 PM
Siendo así:
if(rand()%100 < prob)
    ale = 2;
else
    ale = 4;


Por cierto, no sería <= prob ?
"Mientras tu duermes, hay otra persona en otro lugar del planeta trabajando para ser mejor en lo que tu quieres llegar a ser"

0xFer

CitarPor 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.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

ivancea96

Cita de: Sr_Malweriks en  5 Enero 2016, 22:40 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