Le 421 Contre l`ordinateur [it12] - Exercice
Transcription
Le 421 Contre l`ordinateur [it12] - Exercice
Le 421 Contre l’ordinateur [it12] - Exercice Yvan Maillot, Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner Unisciel algoprog Version 8 avril 2015 Table des matières 1 Le 421 Contre l’ordinateur / pg-ret421A1 (alg) 1.1 Analyse probabiliste du 421 . . . . . . . . . . . . 1.2 Modification du jeu . . . . . . . . . . . . . . . . . 1.3 Recherche du 421 . . . . . . . . . . . . . . . . . . 1.4 Recherche du Brelan . . . . . . . . . . . . . . . . 1.5 Recherche tierce . . . . . . . . . . . . . . . . . . . 1.6 Stratégie Préférence . . . . . . . . . . . . . . . . . 1.7 Jouer . . . . . . . . . . . . . . . . . . . . . . . . . 1.8 Stratégie ultime . . . . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 4 5 6 7 9 10 Le 421 Contre l’ordinateur / pg-ret421A1 (alg) Mots-Clés Schéma itératif, Algorithmique, Programmation, C++. Requis Structures de base, Structures conditionnelles, Algorithmes paramétrés, Structures répétitives, Schéma itératif. Cet exercice améliore le jeu du 421 pour permettre : – A un joueur humain de jouer contre un autre joueur humain. – A un joueur humain de jouer contre l’ordinateur. – De tester différentes stratégies de jeu. 1.1 Analyse probabiliste du 421 Avant d’élaborer des stratégies de jeu, il convient de faire une petite analyse probabiliste puis de vérifier les probabilités par programme. Le nombre de permutations d’une combinaison abc est 6 (abc, acb, bac, bca, cab, cba), et il y a 6*6*6=216 jets de dés possibles (111, 112, 113, ..., 666). Par conséquent : – La probabilité d’obtenir un 421 est donc de 6/(6 × 6 × 6) = 1/36 ≈ 2.8%. – Les différentes façons de faire un brelan sont : 111, 222, 333, 444, 555, 666. Il y en a donc 6 aussi. La probabilité de faire un brelan est donc de 1/36 soit 2.8%. 1 Unisciel algoprog – Le 421 Contre l’ordinateur / it12 2 – Les tierces sont : 123, 234, 345, 456. Il y en a donc 4 × 6 = 24. La probabilité de faire une tierce est de 24/216 = 1/9 soit 11,1%. – Le reste : il y en a 216−6−6−24 = 180. La probabilité de ne faire aucune combinaison est donc de 180/216 soit 83,3%. Écrivez une procédure test_stats qui demande le nombre de lancers dans un entier n puis lance n fois les trois dés. Comptabilisez le nombre de 421 réalisés dans n421, le nombre de brelans dans nb, de tierces dans nt et le reste dans na. Enfin affichez les résultats. Exemple d’exécution. Nombre de ==> Proba ==> Proba ==> Proba ==> Proba lancers? 421 : brelan : tierce : rien : 1000 2.9% 2.7% 10.8% 83.6% Rappel – – – – – 1.2 La La La La La fonction jetDe() simule le lancer d’un dé. procédure decroitre3i(a,b,c) ordonne trois entiers en décroissant. fonction est421(a,b,c) renvoie Vrai si la combinaison (a,b,c) est un 421. fonction brelan(a,b,c) renvoie Vrai si la combinaison (a,b,c) est un brelan. fonction tierce(a,b,c) renvoie Vrai si la combinaison (a,b,c) est une tierce. Modification du jeu Vous allez maintenant modifier le programme du 421 pour offrir la possibilité de désigner la « nature » de chacun des deux joueurs. Il peut être humain ou machine (avec différentes stratégies de jeu pour la machine). Attention, veuillez écrire les procédures et fonctions avant la procédure test_jeu puisque c’est la procédure finale du jeu. Unisciel algoprog – Le 421 Contre l’ordinateur / it12 3 Écrivez une procédure saisirStrategie(st,n) qui affiche le menu ci-après puis qui saisit le numéro de la stratégie du joueur n (entier) dans un entier st jusqu’à ce qu’il soit valide, c.-à-d. compris dans [0..5] (Rappel : [x] désigne le contenu de x). Strategie du joueur [n] 0 - Manuel 1 - Naif 2 - Recherche 421 3 - Recherche brelan 4 - Recherche tierce 5 - Strategie preference Écrivez une procédure jouerTourNaif(nj,s) qui effectue un tour de jeu selon la stratégie de jeu la plus simpliste : l’ordinateur se contente de lancer une seule fois les trois dés. Autant dire qu’il n’y a aucune stratégie. A l’issu de l’unique lancer, la procédure doit restituer le nombre de jetons dans nj (entier) et l’évaluation de la combinaison dans s (entier). Écrivez une procédure jouerTourST(nj,s,st) qui joue un tour selon la stratégie définie par st (entier) et restitue le nombre de jetons potentiellement gagnés dans nj et l’évaluation de la combinaison réalisée dans s. Cette procédure se contente d’appeler la bonne procédure selon st : – Pour 0 (mode manuel) : c’est un appel à la procédure jouerTour(nj,s) que vous avez déjà écrite. – Pour 1 : c’est la stratégie naı̈ve définie ci-avant jouerTourNaif(nj,s). – Et ainsi de suite pour chaque stratégie proposée lesquelles vous seront expliquées plus loin. Vous les ajoutez alors dans cette procédure. Modifiez la procédure test_jeu comme suit : – Déclarez deux entiers st1 et st2 qui représentent le numéro de stratégie choisie par chacun des joueurs. – Saisissez la stratégie des deux joueurs. Unisciel algoprog – Le 421 Contre l’ordinateur / it12 4 – Remplacez les deux instructions jouerTour(nj,s) en jouerTourST(nj,s,st) pour chacun des joueurs. 1.3 Recherche du 421 Comme son nom l’indique, cette stratégie consiste à tout faire pour obtenir un 421 (en respectant les règles du jeu). C’est une stratégie comme une autre. Écrivez une procédure permuter2i(a,b) qui permute les contenus des entiers a et b. Écrivez une procédure rejouerTour421(d1,d2,d3) qui relance un ou plusieurs dés afin (de tenter) d’obtenir un 421. Avant l’appel, la combinaison définie par d1, d2 et d3 est telle que d1>=d2>=d3 et elle n’est pas un 421. Aide méthodologique – Si d1 n’est pas un 4, regardez s’il y a un 4 parmi d2 ou d3, et dans l’affirmative, permutez-le avec d1 pour qu’en d1 on ait un 4. – Si d2 n’est pas un 2, regardez s’il y a un 2 en d3. Si oui, permutez-le avec d2 pour qu’en d2 on ait un 2. – Ici on devrait avoir un début de 421. Si cela n’est pas le cas, relancez chacun des dés pour tenter d’obtenir un 421. Écrivez une procédure jouerTour421(nj,s) qui effectue un tour de jeu à la recherche du 421 : – L’ordinateur lance les trois dés. – Il relance une deuxième fois les dés qui n’ont pas de valeurs convenables. – Il relance une troisième fois les dés qui n’ont pas de valeurs convenables. Unisciel algoprog – Le 421 Contre l’ordinateur / it12 5 A l’issue des lancers, affichez la combinaison obtenue puis restituez le nombre de jetons potentiellement gagnés dans nj et l’évaluation de la combinaison réalisée dans s. Complétez la procédure jouerTourST pour qu’elle appelle la stratégie ci-dessus dans le cas où st vaut 2. 1.4 Recherche du Brelan Cette stratégie consiste à tout faire pour obtenir un brelan. Son fonctionnement est le même que son homologue pour le 421. Écrivez une procédure rejouerTourBrelan(d1,d2,d3) qui relance un ou plusieurs dés afin (de tenter) d’obtenir un brelan. La combinaison définie par d1, d2 et d3 est telle que d1>=d2>=d3 et elle n’est pas un brelan. Aide méthodologique – Si d1 vaut d2, relancez d3. – Sinon si d2 vaut d3, relancez d1. – Sinon si d1 vaut d3, relancez d2. – Sinon relancez deux dés. Unisciel algoprog – Le 421 Contre l’ordinateur / it12 6 Copiez/collez la procédure jouerTour421 en la procédure jouerTourBrelan(nj,s) et remplacez l’appel de la procédure rejouerTourXXX. Complétez la procédure jouerTourST pour qu’elle appelle la stratégie ci-dessus dans le cas où st vaut 3. 1.5 Recherche tierce Cette stratégie consiste à tout faire pour obtenir une tierce. Son fonctionnement est similaire à celui de la recherche du brelan. Copiez/collez la procédure rejouerTourBrelan en la procédure rejouerTourTierce(d1,d2,d3) puis modifiez-la de sorte qu’elle recherche une tierce. La combinaison définie par d1, d2 et d3 est telle que d1>=d2>=d3 et elle n’est pas une tierce. Aide méthodologique – Si d1 vaut d2+1, relancez d3. – Sinon si d2 vaut d3+1, relancez d1. – Sinon si d1 vaut d3+2, relancez d2. – Sinon relancez deux dés (ici le plus grand d1 et le plus petit d3). Unisciel algoprog – Le 421 Contre l’ordinateur / it12 7 Copiez/collez la procédure jouerTour421 en la procédure jouerTourTierce(nj,s) et remplacez l’appel de la procédure rejouerTourXXX. Complétez la procédure jouerTourST pour qu’elle appelle la stratégie ci-dessus dans le cas où st vaut 4. 1.6 Stratégie Préférence Cette stratégie consiste à évaluer à « combien de dés » forme une combinaison (421, brelan ou tierce). Pour cela, il faut d’abord écrire les fonctions combienXXX dont les paramètres d1, d2 et d3 tels que d1>=d2>=d3 forment une combinaison. Écrivez une fonction evalBool(b) qui renvoie 1 si un booléen b est Vrai, 0 sinon. Écrivez une fonction combien421(d1,d2,d3) qui calcule et renvoie le nombre de dés à relancer pour obtenir un 421. Aide méthodologique C’est la même stratégie que la procédure rejouerTour421 mais à la place de relancer les dés, on les évalue. Unisciel algoprog – Le 421 Contre l’ordinateur / it12 8 De même, écrivez une fonction combienBrelan(d1,d2,d3) qui calcule et renvoie le nombre de dés à relancer pour obtenir un brelan. Enfin écrivez une fonction combienTierce(d1,d2,d3) qui calcule et renvoie le nombre de dés à relancer pour obtenir une tierce. Écrivez une fonction combinaison(d1,d2,d3) qui teste et renvoie Vrai si la combinaison de dés est un 421, un brelan ou une tierce, Faux sinon. Écrivez alors une procédure jouerTourPref(nj,s) qui élabore alors la stratégie suivante, dans l’ordre de préférence : – À un dé d’avoir un 421, on le tente. – À un dé d’avoir un brelan, on le tente. – À deux dés d’avoir un 421, on le tente. – À un dé d’avoir une tierce, on la tente. – Sinon, on cherche le 421. Unisciel algoprog – Le 421 Contre l’ordinateur / it12 9 Complétez la procédure jouerTourST pour qu’elle appelle la stratégie ci-dessus dans le cas où st vaut 5. Validez vos procédures avec la solution. Solution simple alg @[pg-ret421A1.alg] 1.7 Jouer Lancez plusieurs parties pour opposer des stratégies différentes. Unisciel algoprog – Le 421 Contre l’ordinateur / it12 Imaginez une solution pour évaluer par programme quelle stratégie est la meilleure. 1.8 Stratégie ultime C’est la stratégie ultime que nous vous laissons mettre au point. 10