Autor |
Mensaje |
aimac
Nivel 6
Registrado: 22 Ago 2009
Mensajes: 283
Carrera: No especificada y Electrónica
|
|
MartinC escribió:
|
Cambienlé el título por uno más descriptivo, como "Simulación de múltiples tiradas de dados" o algo así.
Yo lo hice en C, el programa simula n series de m 'experimentos'. Un 'experimento' es tirar 6 dados y anotar 1 si salió algún as, 0 si no salió ninguno. La salida es por stdout, en n líneas, dando el n° de serie y el porcentaje de experimentos de resultado 1. Las series y experimentos se definen por argumentos en línea de comando:
$ ./dados [series] [experimentos]
Para este caso sería entonces
$ ./dados 100 1000
Lo más cómodo es usar piping:
$ ./dados 100 1000 > corrida-dados-100-1000.txt
Y levantarlos en una hoja de cálculo para graficar. Prueben con diferentes experimentos y series, y modifiquen el código después para hacer las otras simulaciones que pide Grynberg. Realmente vale la pena ponerse a hacer esto.
Código:
|
#include <stdlib>
#include <time>
#include <stdio>
#define DICE_MAX 6
typedef enum {
FALSE=0,
TRUE=1
} bool_t;
int main(int argc, char* argv[]){
/* declaracion de variables */
size_t i,j,k, series, experimentos;
size_t contador;
size_t d1;
bool_t flag=FALSE;
if(argc!=3) {
fprintf(stderr, "%s", "Error de argumentos.\n");
return EXIT_FAILURE;
}
series = atoi(argv[1]);
experimentos = atoi(argv[2]);
srand(time(NULL));
for(k=0; k<series; k++) {
contador=0;
for(j=0; j<experimentos; j++) {
flag=FALSE;
for(i=0; i<6; i++){
/*se tira el dado*/
d1=(size_t)((rand()*1.0 / RAND_MAX)*DICE_MAX)+1;
/*printf("%lu,%lu\n", d1, d2);*/
if(d1==1) flag=TRUE;
}
if(flag) contador++;
}
printf("%lu %f\n", k+1, contador*1.0/experimentos);
}
return EXIT_SUCCESS;
}
|
Y ojo que la probabilidad de que un experimento dé 1 no es igual a la probabilidad de ver un as en una tirada de dados. Dejo el n° aproximado para que comprueben si llegaron bien al resultado:
|
|
|
|
|
_________________
|
|
|
|
|
Matts
Nivel 9
Edad: 33
Registrado: 18 May 2009
Mensajes: 1054
Carrera: Industrial y Química
|
|
Hache escribió:
|
Matts escribió:
|
Ah! Muchas gracias.
Como no se usar C, intente hacer algo en Matlab. Lo que hice fue generar una matriz de 100x6 numeros aleatorios entre 1 y 6. Hasta ahi todo barbaro, pero despues no tengo idea como hacer para que al lado de cada fila salga un 1 en el caso de que haya un As o en un 0 en caso contrario.
Y menos hacer ese procedimiento 100 veces...
|
http://web.fi.uba.ar/~lpandolfo/Proba/dados.html
|
Gracias, che.
Al final, como la verdad no se bien programar, hice algo en excel que la mitad fue 'a mano'.
|
|
|
|
|
|
|
|
|
|
Ir a página Anterior 1, 2
|
Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro No podés responder a temas en este foro No podés editar tus mensajes en este foro No podés borrar tus mensajes en este foro No podés votar en encuestas en este foro No Podéspostear archivos en este foro No Podés bajar archivos de este foro
|
Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker365 Attacks blocked.
|
|
[ Tiempo: 1.1587s ][ Pedidos: 20 (0.9791s) ] |