/*************************************************************************************************************************************/ /* */ /* E T U D E D U M E G A - P A R A D O X E D E P A R R O N D O : */ /* */ /* */ /* Author of '$xtc/ParadoxeParrondo.12$c' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20120704102026). */ /* */ /*************************************************************************************************************************************/ #include "INCLUDES.01.I" extern void *malloc(); static int dimX=0; #define Xmin 0 #define Xmax (Xmin + (dimX-1)) /* Definition des abscisses. */ static int dimY=0; #define Ymin 0 #define Ymax (Ymin + (dimY-1)) /* Definition des ordonnees. */ #define IMAGE(x,y) \ (*(image + (((y-Ymin)*dimX) + (x-Xmin)))) #define TAILLE_IMAGE \ (dimY*dimX*sizeof(double)) /* Acces a un point de l'image. */ extern double drand48(); #define NPARTIES 10000 \ /* Nombre de pas... */ #define NJEU_A ((x-Xmin)+1) #define NJEU_B ((y-Ymin)+1) /* Nombre de chacun des jeux. */ #define SEUIL_A (1.0/2.0) #define SEUIL_B (1.0/2.0) /* Seuils utiles... */ #define CONSERVE Jeton #define RETOURNE COND(IFEQ(Jeton,NOIR),BLANC,NOIR) /* Etats possibles du jeton... */ int CapitalCourant; /* Gain courant. */ int Jeton=NOIR; /* Gain courant. */ double CheckGenerateur=0; double NombreDeTirages=0; double random() { double ValeurAleatoire=drand48(); CheckGenerateur=CheckGenerateur+ValeurAleatoire; NombreDeTirages=NombreDeTirages+1; return(ValeurAleatoire); } void jeu(couleur,seuil) int couleur; double seuil; { double ValeurAleatoire=random(); if (Jeton == couleur) { if (ValeurAleatoire < seuil) { CapitalCourant = CapitalCourant+3; Jeton = CONSERVE; } else { CapitalCourant = CapitalCourant-1; Jeton = RETOURNE; } } else { if (ValeurAleatoire < seuil) { CapitalCourant = CapitalCourant+1; Jeton = CONSERVE; } else { CapitalCourant = CapitalCourant-2; Jeton = CONSERVE; } } } void jeuA() { jeu(BLANC,SEUIL_A); } void jeuB() { jeu(NOIR,SEUIL_B); } double jeuAB(Arg_nJeu_A,Arg_nJeu_B) int Arg_nJeu_A; int Arg_nJeu_B; { int nParties; CapitalCourant=0; /* Gain courant. */ for (nParties=1 ; nParties<=NPARTIES ; nParties++) { int nJeu_A,nJeu_B; for (nJeu_A=1 ; nJeu_A<=Arg_nJeu_A ; nJeu_A++) { jeuA(); } for (nJeu_B=1 ; nJeu_B<=Arg_nJeu_B ; nJeu_B++) { jeuB(); } } return(((double)CapitalCourant/((double)(NPARTIES*((Arg_nJeu_A+Arg_nJeu_B)))))); } main() { int x,y; /* Definition des coordonnees. */ double *image; /* Definition de l'image a generer... */ Get(dimX,"dimX"); Get(dimY,"dimY"); /* Recuperation des dimensions en 'X' et en 'Y' de l'image a generer. */ image=malloc(TAILLE_IMAGE); /* Definition de l'image a generer... */ for (y=Ymin ; y<=Ymax ; y++) { for (x=Xmin ; x<=Xmax ; x++) { IMAGE(x,y)=jeuAB(NJEU_A,NJEU_B); } } write(1,image,TAILLE_IMAGE); /* Sortie de l'image... */ /* */ /* Le 20120704161417 je note que l'exploitation peut se faire de la facon suivante : */ /* utiles) : */ /* */ /* */ /* :Debut_listG_MegaParadoxe_Parrondo_12: */ /* */ /* $Z setenv xTV $xTG */ /* */ /* $Z xtc */ /* $Z $Cc $Bsysteme ParadoxeParrondo.12$c */ /* */ /* $Z gFITn FIT1 15 15 */ /* $Z FIT1 */ /* */ /* $Z $DELETE $xTV/MEGA_PARADOXE */ /* */ /* $Z $aPout \ */ /* $Z > $xTV/MEGA_PARADOXE */ /* */ /* $Z ext Std */ /* $Z setenv P__mrseIlF 0 */ /* */ /* $Z $xci/acces$X \ */ /* $Z A=$xTV/MEGA_PARADOXE \ */ /* $Z standard=FAUX zero=VRAI \ */ /* $Z $formatI | \ */ /* $Z $xci/vraies_C$X \ */ /* $Z p=$xiP/rouge_vert.12 \ */ /* $Z R=$xTV/MEGA_PARADOXE \ */ /* $Z $formatI */ /* */ /* :Fin_listG_MegaParadoxe_Parrondo_12: */ /* */ /* */ /* puis : */ /* */ /* listG $xtc/ParadoxeParrondo.12$c \ */ /* Debut_listG_""MegaParadoxe_Parrondo_12 \ */ /* Fin_listG_""MegaParadoxe_Parrondo_12 */ /* */ }