Foros-FIUBA Foros HostingPortal
 FAQ  •  Buscar  •  Wiki  •  Apuntes  •  Planet  •  Mapa  •  Eyeon  •  Chat
Preferencias  •  Grupos de Usuarios
Registrarse  •  Perfil  •  Entrá para ver tus mensajes privados  •  Login
Ver tema siguiente
Ver tema anterior

Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente
Autor Mensaje
aimac
Nivel 6



Registrado: 22 Ago 2009
Mensajes: 283

Carrera: No especificada y Electrónica
blank.gif
MensajePublicado: Dom Mar 18, 2012 3:52 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

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: [tex]\mathbf{P}_{(A)} \cong 0,6651[/tex]


Image

_________________
Image

   OfflineGalería Personal de aimacVer perfil de usuarioEnviar mensaje privado
Matts
Nivel 9


Edad: 33
Registrado: 18 May 2009
Mensajes: 1054

Carrera: Industrial y Química
kenya.gif
MensajePublicado: Lun Mar 19, 2012 12:03 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

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'.


Aries Género:Masculino Cabra OfflineGalería Personal de MattsVer perfil de usuarioEnviar mensaje privadoEnviar emailMSN Messenger
Mostrar mensajes de anteriores:      
Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente

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 CrackerTracker
365 Attacks blocked.

Powered by phpBB2 Plus, phpBB Styles and Kostenloses Forum based on phpBB © 2001/6 phpBB Group :: FI Theme :: Mods y Créditos

Foros-FIUBA está hosteado en Neolo.com Cloud Hosting

[ Tiempo: 0.4111s ][ Pedidos: 20 (0.3207s) ]