Simulation CaRMetal
Bien que ce ne soit pas du tout prévu par l’énoncé du TP, voici une simulation du jeu en ligne. Pour démarrer une partie (on peut vérifier plusieurs fois), cliquer deux fois sur le bouton « recommencer » en bas à gauche (pour qu’il soit à nouveau enfoncé). Ensuite on fait pareil avec le bouton « Lancer le dé » en haut à gauche (décocher puis cocher) chaque fois qu’on veut lancer le dé. Le pion avance alors en suivant la règle du jeu. Ceci dit un mouvement (zoom par exemple) peut relancer le dé ce qui oblige alors à recommencer la partie.
Simulation de 100 parties
En JavaScript, le dé s’obtient classiquement par
de=Math.floor(Math.random()*6+1)
(de, pour « dé », est une variable entière allant de 1 à 6).
Pour savoir si de est divisible par 3, on calcule de modulo 3 et on regarde s’il est nul :
de%3==0
Avec une variable de type chaîne de caractères appelée aff (comme « affichage »), un test sur la position du pion à la fin de la partie détermine si aff est égal à « gagné » ou à « perdu » :
/*Programme tp 118a
*/
var x,y;
var de;//entier entre 1 et 6
var aff;//texte sortie
for(partie=0;partie<100;partie=partie+1){
x=0;
y=0;
for(n=1;n<=6;n=n+1){
de=Math.floor(Math.random()*6+1);
if(de%3==0){
x++;
} else {
y++;
}
}
if((x<4)&&(y<5)){
aff="gagné";
} else {
aff="perdu";
}
Println(x+","+y+","+aff);
}
Plutôt que d’afficher les 6 résultats de lancers de dé et les 6 valeurs successives de x et y, on a seulement affiché les valeurs finales de x et y et le texte aff.
Pour incrémenter x, au lieu d’écrire x=x+1 on a choisi l’abréviation x++. Idem pour y.
Simulation de 1000 parties
Pour le A.2 on va remplacer la variable aff qui disait si la partie est gagnée ou perdue, par une variable numérique entière gain qui est égale au nombre de parties gagnées sur N parties (initialement N=1000). Alors chaque fois que la partie est gagnée, gain est incrémentée (avec gain++) :
/*Programme tp 118b
*/
var x,y;
var de;//entier entre 1 et 6
var gain=0;
var N=1000//nombre parties
for(partie=0;partie<N;partie=partie+1){
x=0;
y=0;
for(n=1;n<=6;n=n+1){
de=Math.floor(Math.random()*6+1);
if(de%3==0){
x++;
} else {
y++;
}
}
if((x<4)&&(y<5)){
gain++;
}
}
var freq=gain/N;
Alert(freq);
Dans l’espace
La question B.2 a été mise là uniquement pour occuper l’hypothétique candidat qui aurait réussi à faire tout ce qui précède. D’ailleurs elle est très vague : Comment peut-on généraliser dans l’espace ?
On va alors imaginer les régles suivantes :
- On incrémente x, y ou z selon la valeur du dé modulo 3.
- Les valeurs de x, y et z à ne pas dépasser seront 3, 4 et 5.
Le fichier JavaScript précédent se modifie alors en celui-là :
/*Programme tp 118c
*/
var x,y,z;
var de;//entier entre 1 et 6
var gain=0;
var N=1000//nombre parties
for(partie=0;partie<N;partie=partie+1){
x=0;
y=0;
z=0;
for(n=1;n<=6;n=n+1){
de=Math.floor(Math.random()*6+1);
if(de%3==0){
x++;
} else if(de%3==1) {
y++;
} else {
z++;
}
}
if((x<3)&&(y<4)&&(z<5)){
gain++;
}
}
var freq=gain/N;
Alert(freq);
Conclusion
L’activité proposée par Monique Gironce vaut le détour, ne serait-ce que pour le lien vers la vidéo.
Commentaires