/*Un programme qui traite la version simplifiée du jeu du projet dans laquelle il n'y a qu'un dé*/ programme unde; /*pour un maximum de 20 joueurs*/ type reelvec:tableau 1..6 de reel; type reeltab:tableau 1..20 de reelvec; type entvec:tableau 1..6 de entier; type enttab:tableau 1..6 de entvec; type strattab:tableau 1..20 de enttab; var Strat:strattab; /*Strat[i][s][d]=la stratégie de joueur i s'il lui faut au moins s pour avoir une possibilité de gagner et son premier dé vaut d; 1=valider; 2=relancer*/ var Pr:reeltab; /*Pr[i][s]=la probabilité de gagner du meilleur joueur parmi les i premiers si son score est de s*/ var p,Prgagnesi,Prgagne:reel; /*Prgagnesi=la probabilité de gagner du joueur actuel (i) s'il décide de relancer; Prgagne=sa probabilité d'être le meilleur parmi les i premiers, étant donnée sa stratégie décidée*/ var maxnomjou,nomjou:entier; debut maxnomjou:=20; printf("Combien de joueurs?\n"); scanf("%i",nomjou); si nomjou>maxnomjou OU nomjou<1 alors printf("nombre de joueurs impossible\n"); retourne finsi; pour j allant de 1 a 6 par pas de 1 faire Pr[nomjou][j]:=1 finpour; /*j*/ pour i allant de nomjou a 1 par pas de -1 faire /*calculer la bonne strategie pour joueur i */ pour g allant de 1 a 6 par pas de 1 faire /*s'il lui faut au moins g*/ Prgagne:=0; /*sa prob d'avoir score de g au moins*/ Prgagnesi:=0; pour d allant de 1 a 6 par pas de 1 faire si d>=g alors Prgagnesi:=Prgagnesi+Pr[i][d]/6 finsi finpour; /*d*/ pour d allant de 1 a 6 par pas de 1 faire /*si le de vaut d*/ si dPr[i][d] alors Strat[i][g][d]:=2 /*relance*/ sinon Strat[i][g][d]:=1 /*valide*/ finsi; printf("Strat[%i,%i,%i]=%i\n",i,g,d,Strat[i][g][d]); si Strat[i][g][d]=2 alors Prgagne:=Prgagne+(7-g)/36.0; /*deuxieme jet*/ sinon Prgagne:=Prgagne+1.0/6; /*reste*/ finsi finpour; /*d*/ Pr[i-1][g]:=(1-Prgagne)*Pr[i][g]; si i>1 alors printf( "Proba que le meilleur des %i premier(s) gagne si son score est %i = %f\n", i-1,g,Pr[i-1][g]) finsi finpour /*g*/ finpour; /*i*/ /* et enfin la probabilité que joueur 1 gagne*/ p:=0; Prgagnesi:=0; pour d allant de 1 a 6 par pas de 1 faire Prgagnesi:=Prgagnesi+Pr[1][d]/6 finpour; pour d allant de 1 a 6 par pas de 1 faire si Strat[1][1][d]=2 alors p:=p+Prgagnesi/6 sinon p:=p+Pr[1][d]/6 finsi finpour; printf("Prob que joueur 1 gagne = %f\n",p) fin.