Jeu du pendu [ka07] - Exercice

Documents pareils
alg - Classes, instances, objets [oo] Exercices résolus

C++ - Classes, instances, objets [oo] Exercices résolus

1.6- Génération de nombres aléatoires

Introduction à MATLAB R

L exclusion mutuelle distribuée

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Correction du baccalauréat ES/L Métropole 20 juin 2014

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

1 Recherche en table par balayage

Programmation Objet - Cours II

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Poker. A rendre pour le 25 avril

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

TP1 : Initiation à Java et Eclipse

Entraînement au concours ACM-ICPC

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Programmation C++ (débutant)/instructions for, while et do...while

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

La fonction exponentielle

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

LEÇON N 7 : Schéma de Bernoulli et loi binomiale. Exemples.

1. Utilisation du logiciel Keepass

Dynamic Host Configuration Protocol

Le Data Mining au service du Scoring ou notation statistique des emprunteurs!

Notions fondamentales du langage C# Version 1.0

La programmation orientée objet et le langage C++

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Procédure pour emprunter ou réserver un livre numérique

Continuité et dérivabilité d une fonction

C f tracée ci- contre est la représentation graphique d une

GUIDE ISAN: 7 Création d un ISAN In-Dev 1

1 Identités pour l enregistrement IMS

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

Feuille TD n 1 Exercices d algorithmique éléments de correction

M2 IAD UE MODE Notes de cours (3)

Programmer en JAVA. par Tama

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Formation PROFIS Installation. Module 1 : Plateforme générale. PROFIS Installation I Plateforme générale I MKT E2 CM I

Bases Java - Eclipse / Netbeans

programmation S initier à la la Avec des exemples en C, C++, C#, Java et PHP Avec des exemples en C, C++, C#, Java et PHP Claude Delannoy

3 logiciels «gratuits» pour gérer sa bibliographie

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

L authentification de NTX Research au service des Banques

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Conception des bases de données : Modèle Entité-Association

Baccalauréat ES/L Métropole La Réunion 13 septembre 2013 Corrigé

Ressources pour le lycée général et technologique

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

PG208, Projet n 3 : Serveur HTTP évolué

COMMANDER A DISTANCE LE ROBOT-PONG ETUDE DE LA TELECOMMANDE (2 nde PARTIE)

Modes opératoires pour le chiffrement symétrique

Structurer ses données : les tableaux. Introduction à la programmation

TD n o 8 - Domain Name System (DNS)

Concept de machine virtuelle

Génie Logiciel avec Ada. 4 février 2013

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

Chap III : Les tableaux

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Bac Blanc Terminale ES - Février 2011 Épreuve de Mathématiques (durée 3 heures)

Probabilités III Introduction à l évaluation d options

Algorithmique avec Algobox

Application 1- VBA : Test de comportements d'investissements

NOTICE D INSTALLATION

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

N IMPRIMER PAS CE DOCUMENT, VOUS POURREZ LE CONSULTER DURANT L INSTALLATION

Le langage C. Séance n 4

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

BACCALAURÉAT GÉNÉRAL SESSION 2012 OBLIGATOIRE MATHÉMATIQUES. Série S. Durée de l épreuve : 4 heures Coefficient : 7 ENSEIGNEMENT OBLIGATOIRE

Surveiller les applications et les services grâce à la surveillance réseau

L EFFET PARALLAXE N EST

LES MOTEURS DE RECHERCHE SUR INTERNET

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

PROTEGER SA CLE USB AVEC ROHOS MINI-DRIVE

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

Sécurité d IPv6. Sécurité d IPv6. Stéphane Bortzmeyer AFNIC bortzmeyer@nic.fr. Stéphane Bortzmeyer AFNIC bortzmeyer@nic.fr

Algorithmique et Programmation, IMA

La messagerie électronique avec La Poste

TSTI 2D CH X : Exemples de lois à densité 1

Introduction aux Systèmes et aux Réseaux, Master 2 CCI


TP 1. Prise en main du langage Python

Esterel The french touch star touch esterel advance

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Objectifs du cours d aujourd hui. Informatique II : Cours d introduction à l informatique et à la programmation objet. Complexité d un problème (2)

Suites numériques. Exercice 1 Pour chacune des suites suivantes, calculer u 1, u 2, u 3, u 10 et u 100 : Introduction : Intérêts simpleset composés.

LES DECIMALES DE π BERNARD EGGER

TD/TP PAC - Programmation n 3

KeePass - Mise en œuvre et utilisation

Devenez un véritable développeur web en 3 mois!

SERVICES EN LIGNE DES SUBVENTIONS ET DES CONTRIBUTIONS

Nouvelle version de Zonecheck, la 3.0, avec tests DNSSEC

Rappels sur les suites - Algorithme

TABLE DES MATIERES MENTIONS LEGALES INTRODUCTION CHAPITRE 1 : INSTALLATION DE L ALGORITHME CHAPITRE 2 : EXECUTION & OPTIMISATION DU BACKTEST

La simulation probabiliste avec Excel

Transcription:

Jeu du pendu [ka07] - Exercice Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner Unisciel algoprog Version 10 avril 2015 Table des matières 1 Jeu du pendu / pg-jpenduc1 (C++) 1 1.1 Présentation du jeu.............................. 1 1.2 Classe Joueur................................. 2 1.3 Classe Pendu................................. 3 1.4 Classe Humain................................ 4 1.5 Classe Machine................................ 5 1 Jeu du pendu / pg-jpenduc1 (C++) Mots-Clés Jeux de logique, Classes abstraites, Algorithmique, Programmation, C++. Requis Classes, Héritage, Polymorphisme, Classes abstraites. Comprend [Chappelier-C1 :c07 :ex45]. Cet exercice réalise une version orientée objet polymorphique du jeu du Pendu. 1.1 Présentation du jeu La version officielle du «Jeu du Pendu» se joue à plusieurs personnes. Vous supposerez ici que le jeu se joue à deux. L un des joueurs commence par proposer un mot à deviner. Supposez que l autre joueurs ne voit pas ce mot. Il n en connait au départ que la longueur. Ce deuxième joueur propose ensuite une lettre. Si cette lettre est présente dans le mot, toutes ses occurrences sont indiquées. Sinon, ce joueur «progresse» sur le chemin de la pendaison. Au bout d un certain nombre NMAX étapes, il a perdu : il est «pendu». La partie se termine lorsque chacun des deux joueurs a proposé à l autre un mot à deviner. Chaque joueur qui parvient à en pendre un autre gagne un point. Chaque joueur qui trouve un mot (c.-à-d. propose la dernière lettre à trouver) gagne un point. A la fin de la partie, gagne celui qui est encore en vie et a le plus de points. 1

Unisciel algoprog Jeu du pendu / ka07 2 Au terme de la pendaison (NMAX-ème étape), le pendu pourrait ressembler à un petit pendu (ici 12 essais) : / _O_ I / \ _/ \ #e= 12 On peut choisir ici un affichage totalement différent. Le but n étant pas de perdre de temps à essayer de faire un joli dessin (ce qui compte c est que chaque joueur voit clairement à chaque tour de jeu à quel stade il en est), vous pouvez utiliser la classe PendaisonC1 fournie en téléchargement qui permet l affichage du pendu. Plusieurs joueurs Le jeu du pendu pouvant se jouer à plusieurs joueurs (un qui propose le mot et les autres essayant à tour de rôle de le deviner), la solution proposée ne fait pas d hypothèse sur le nombre de joueurs. 1.2 Classe Joueur Créez une classe de base Joueur représentant les joueurs. Incluez : Le nom (chaîne de caractères) du joueur. Le numéro de l étape (entier positif) atteinte par le joueur. Le nombre de points (entier positif) gagné par le joueur. Écrivez un constructeur à un paramètre (le nom du joueur) initialisant les attributs. Écrivez une méthode incrpoints qui incrémente le nombre de points du joueur. Écrivez une méthode incretape qui incrémente le nombre d étapes du joueur. Écrivez une méthode abstraite proposermot qui permet au joueur de proposer un mot (à faire deviner à l autre). Écrivez une méthode abstraite proposerlettre qui permet au joueur de proposer une lettre (lorsqu il essaie de deviner un mot). C++ @[JPJoueurC1.hpp] @[JPJoueurC1.cpp]

Unisciel algoprog Jeu du pendu / ka07 3 1.3 Classe Pendu Créez une classe JeuPendu permettant de jouer une partie de «pendu». Incluez parmi ses attributs : Le mot à-deviner (chaîne de caractères). La tentative (chaîne de caractères) (c.-à-d. le mot tenté) de l adversaire. Un vecteur de pointeurs sur Joueur. Écrivez un constructeur prenant en paramètre un vecteur de pointeurs sur Joueur. Écrivez une méthode interne initadeviner(k) qui permet au joueur numéro k de proposer un mot à deviner. Aide simple Ce mot sert à initialiser le mot à-deviner et est généré grâce à la méthode proposermot de la classe Joueur. Écrivez une méthode interne inittentative qui initialise la tentative avec des blancs soulignés ( _ ). Exemple : Si à-deviner vaut «test», la tentative vaudra. Écrivez une méthode interne estdansmot(c) qui teste et renvoie Vrai si une lettre c (caractère) se trouve dans le mot à-deviner. Écrivez une méthode interne incluredansmot(c) qui remplace le blanc souligné correspondant dans la tentative par la lettre qui se trouve dans le mot à-deviner. Soit la classe Pendaison qui affiche la pendaison d ordre n. Chaque ligne du tableau interne correspond à l affichage devant se faire à l étape d une pendaison. C++ @[JPPendaisonC1.hpp] Écrivez une méthode interne devinermot(k) qui, étant donné l indice du joueur k ayant proposé le mot à-deviner, permet à l autre d essayer de deviner le mot caché. La méthode fait réessayer le joueur tant que le mot n est pas deviné ou qu il n a pas été pendu. Aide simple Utilisez la méthode Joueur::proposerLettre pour permettre au joueur qui doit deviner le mot de proposer une lettre. A chaque étape, c est soit le mot partiellement deviné qui est affiché (succès), soit la progression de la figure du pendu (échec). Pour réaliser l affichage de la pendaison d ordre n, appelez la méthode Pendaison::afficher(n). Écrivez une méthode jouer qui permet à chaque joueur de proposer à l autre un mot à deviner.

Unisciel algoprog Jeu du pendu / ka07 4 Écrivez une méthode afficher qui affiche le résultat de la partie. C++ @[JPPenduC1.hpp] @[JPPenduC1.cpp] 1.4 Classe Humain Ce problème définit la classe du joueur humain et réalise le jeu du pendu de deux joueurs humains. Créez une classe (concrète) Humain dérivée de la classe Joueur qui permet de modéliser les joueurs humains. Écrivez la méthode abstraite proposermot qui se contentera de lire une chaîne depuis le terminal et de la renvoyer. Écrivez la méthode abstraite proposerlettre qui se contentera de lire un caractère depuis le terminal et de le renvoyer. C++ @[JPHumainC1.hpp] @[JPHumainC1.cpp] Écrivez une procédure jeu_contrehumain qui permet à deux joueurs humains de s affronter. Testez. Validez votre procédure avec la solution. C++ @[pg-jpenduc1a.cpp]

Unisciel algoprog Jeu du pendu / ka07 5 1.5 Classe Machine On souhaite maintenant faire en sorte qu un des joueurs puisse être l ordinateur. Si c est le cas, les méthodes abstraites de la classe Joueur ne se contenteront plus de lire le mot ou la lettre mais les génèreront automatiquement. Afin de générer des mots valides, un joueur machine dispose d un dictionnaire de mots (tableau de chaînes de caractères) qui sera chargé au lancement du programme et qui sera fourni au constructeur. Créez une classe (concrète) Machine dérivée de classe Joueur qui contient un vecteur de mots (chaîne de caractères). Fournissez un constructeur permettant de mémoriser le dictionnaire. Écrivez la méthode abstraite proposermot de la façon suivante : 1. Générez aléatoirement un entier u [1..n] (où n désigne la taille du dictionnaire). 2. Retournez le u-ème mot du dictionnaire. Outil C++ La fonction rand(), définie dans la bibliothèque <cstdlib>, renvoie un entier pseudo-aléatoire dans [0..RAND_MAX]. L initialisation du générateur de nombres aléatoires s effectuera dans le programme principal avec l instruction : srand(time(0)); La fonction srand est définie dans la bibliothèque <cstdlib> et la fonction time dans la bibliothèque <ctime>. Écrivez la méthode pure proposerlettre de la façon suivante : 1. Générez aléatoirement un entier p [0..25]. 2. Retournez la p-ème lettre correspondante. Outil C++ La p-ème lettre minuscule est donné par l expression : char(int( a )+p) C++ @[JPMachineC1.hpp] @[JPMachineC1.cpp] Écrivez une procédure jeu_contremachine qui permet à un joueur humain d affronter un joueur machine.

Unisciel algoprog Jeu du pendu / ka07 6 Testez. Validez votre procédure avec la solution. C++ @[pg-jpenduc1b.cpp]