Jeu de l anagramme [tb06] - Exercice

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


Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

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

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Cours d Algorithmique et de Langage C v 3.0

Programme Compte bancaire (code)

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)

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INFO-F-105 Language de programmation I Séance VI

Algorithmique et Programmation, IMA

Introduction au pricing d option en finance

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Claude Delannoy. 3 e édition C++

Introduction à l algorithmique et à la programmation M1102 CM n 3

IUT ANNECY Département Mesures Physiques Cours d informatique Initiation au langage C

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Introduction au langage C

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

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

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

CHAPITRE V. Recherche et tri

Introduction à l héritage en C++

I. Introduction aux fonctions : les fonctions standards

Les arbres binaires de recherche

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Cours de Systèmes d Exploitation

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

SUPPORT DE COURS. Langage C

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

et Programmation Objet

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

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

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

TP 1. Prise en main du langage Python

Utilisation d objets : String et ArrayList

Recherche dans un tableau

Notions fondamentales du langage C# Version 1.0

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

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

1 Recherche en table par balayage

Langage Java. Classe de première SI

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

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Une introduction à Java

Bases de programmation. Cours 5. Structurer les données

Algorithmique I. Algorithmique I p.1/??

Le langage C++ (partie I)

Conventions d écriture et outils de mise au point

Cours Programmation Système

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Algorithmique et programmation : les bases (VBA) Corrigé

Travaux Dirigés n 1 : chaînes de caractères

TP : Gestion d une image au format PGM

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Programmer en JAVA. par Tama

Les structures de données. Rajae El Ouazzani

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

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Cours d initiation à la programmation en C++ Johann Cuenin

Modes opératoires pour le chiffrement symétrique

Programmation stochastique

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Architecture des ordinateurs

Programmation système en C/C++

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

COMPARAISONDESLANGAGESC, C++, JAVA ET

Découverte de Python

Examen Médian - 1 heure 30

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Cours de Probabilités et de Statistique

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Introduction à la Programmation Parallèle: MPI

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Programmation en C/C++

Informatique I. Sciences et Technologies du Vivant (Semestre 1)

Informatique III: Programmation en C++

Solutions du chapitre 4

Java Licence Professionnelle CISII,

La programmation des PIC en C. Les fonctions, les interruptions.

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Initiation à l algorithmique

TD3: tableaux avancées, première classe et chaînes

Chap III : Les tableaux

Les structures. Chapitre 3

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

V- Manipulations de nombres en binaire

Premiers Pas en Programmation Objet : les Classes et les Objets

Corrigé des TD 1 à 5

Département Automatisation et Informatisation Année Programmation en C++ Institut des Sciences et Techniques de l Ingénieur d Angers

Programmation Classique en langage C

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Programmation système I Les entrées/sorties

TRIGONOMETRIE Algorithme : mesure principale

Poker. A rendre pour le 25 avril

Transcription:

Jeu de l anagramme [tb06] - Exercice Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner Unisciel algoprog Version 23 octobre 2016 Table des matières 1 Jeu de l anagramme / pgjeugram 2 1.1 Présentation du jeu.............................. 2 1.2 Saisie d un mot................................ 3 1.3 Procédures et fonctions utilitaires...................... 3 1.4 Proposition d un mot............................ 4 1.5 Divination.................................. 5 2 Références générales 9 C++ - Jeu de l anagramme (Solution) Mots-Clés Tableau unidimensionnel, Jeu Requis Structures de base, Structures conditionnelles, Algorithmes paramétrés, Structures répétitives, Schéma itératif Difficulté (2 h) Objectif Cet exercice réalise le jeu de l anagramme. 1

Unisciel algoprog Jeu de l anagramme [tb06] 2 1 Jeu de l anagramme / pgjeugram 1.1 Présentation du jeu Anagramme Une anagramme (le mot est féminin) du grec anagramma : renversement de lettres est une construction qui permute les lettres d un mot pour en extraire un mot nouveau. Exemple : crane, écran, nacre, carne, rance, ancre. (Wikipédia) Jeu de l anagramme Il se joue à deux. L un pense à un mot, par exemple : potence (la longueur du mot est de 7 caractères) mélange les lettres de ce mot initial et l affiche : eteconp (on ne vérifie pas que le mot existe!) L autre doit deviner le mot initial en proposant des anagrammes. Après chacun des anagrammes proposés, l autre joueur donne le nombre de lettres bien placées. Par exemple, pour : tecnpoe: 1 lettre(s) bien placée(s) (dernier e bien placé) petonce: 5 lettre(s) bien placée(s) (ici p.t.nce) Au bout de sept échecs, le joueur a perdu s il n a pas réussi à deviner le mot initial. Déroulement du programme La machine organise le jeu. 1. Le premier joueur entre un mot de 3 à 10 lettres pendant que l autre joueur ne regarde pas. 2. La machine mélange les lettres de ce mot puis affiche l anagramme. 3. Le second joueur propose un anagramme. 4. La machine indique combien de lettres sont bien placées. 5. La machine reprend au point 3 sauf si le joueur a épuisé tous ses coups ou trouvé le mot initial. A la fin de la partie, la machine affiche si le joueur a gagné ou non. C++ : Paramètres formels des tableaux Il sera impératif de les définir correctement : Par référence dans le cas d un paramètre effectif en Résultat ou en Modifié. Par référence constant en Donnée.

Unisciel algoprog Jeu de l anagramme [tb06] 3 1.2 Saisie d un mot L idée est d utiliser un tableau d au plus dix caractères pour mémoriser le mot à deviner ainsi que pour proposer un mot. Pour indiquer qu une lettre a été prise, on la remplacera par le caractère souligné qui n est pas une lettre. De plus, pour éviter d avoir des mots dont certaines lettres seraient en minuscule et d autres en majuscule, seules des lettres minuscules pourront être saisies. Définissez les constantes entières NMIN=3 (longueur minimale) et NMAX=10 (longueur maximale) des mots. Puis définissez le type TabCarac comme étant un tableau de NMAX caractères. Écrivez une fonction estlettre(c) qui teste et renvoie Vrai si un caractère c est une lettre minuscule (donc compris entre 'a' et 'z'), Faux sinon. Déduisez une fonction saisielettre qui effectue la saisie contrainte d une lettre puis la renvoie, c.-à-d. que la fonction doit demander un caractère jusqu à ce que estlettre() soit vraie. Écrivez une procédure saisirmot(mot,n) qui effectue une saisie sécurisée d un entier dans n qui doit être compris entre NMIN et NMAX puis fait la saisie d un TabCarac dans mot de n lettres par appel à la fonction saisielettre. Écrivez le début du programme qui déclare un entier et un TabCarac puis effectue sa saisie. Testez. 1.3 Procédures et fonctions utilitaires Écrivez une procédure melanger(mot,n) qui mélange les n caractères d un TabCarac mot comme suit : Pour j variant de n-1 à 1 (pas décroissant) 1. Tirez au hasard un entier k entre 0 et j inclus. 2. Permutez les caractères en position k et j de mot.

Unisciel algoprog Jeu de l anagramme [tb06] 4 Outil C++ La fonction rand(), définie dans la bibliothèque <cstdlib>, renvoie un entier pseudoaléatoire dans [0..RAND_MAX]. Utilisez le modulo pour projeter l entier dans l intervalle souhaité. Écrivez une procédure affichermot(mot,n) qui affiche les n premiers caractères d un TabCarac mot. Écrivez une procédure copiermot(mot,copie,n) qui recopie les n caractères d un TabCarac mot dans un TabCarac copie. Écrivez une fonction rechlin(c,mot,n) qui recherche et renvoie l indice d un caractère c dans les n premiers caractères d un TabCarac mot, -1 en cas de recherche infructueuse. 1.4 Proposition d un mot Pour la saisie sécurisée de n caractères dans un TabCarac mot étant donné l anagramme TabCarac ana, on utilisera l algorithme suivant : Recopiez l anagramme ana dans un TabCarac copie. Tant que les n caractères n ont pas été saisis : Saisissez une lettre dans c. Recherchez c dans la copie. En cas de recherche fructueuse, placez c dans mot, incrémentez le nombre de caractères saisis et remplacez la lettre dans copie par le blanc souligné (_). Sinon, affichez : Lettre non presente dans l'anagramme Finalement, affichez le mot saisi. Écrivez une procédure proposermot(mot,n,ana) qui réalise l algorithme spécifié.

Unisciel algoprog Jeu de l anagramme [tb06] 5 1.5 Divination Reste à définir la procédure qui permet à un joueur de proposer des mots jusqu à ce qu il trouve le mot de n caractères d un TabCarac adeviner en au plus sept coups. Cette procédure devra : Recopiez adeviner dans un TabCarac ana. Mélangez les lettres de l anagramme ana. Déclarez un TabCarac mot, un entier ncoups du nombre de coups effectués et un entier nbp du nombre de lettres bien placées. Initialisez ncoups et nbp. Tant que les sept coups n ont pas été joués et que le mot n a pas été trouvé : Incrémentez le nombre de coups effectués. Affichez le message suivant (où [x] désigne le contenu de x) : coup [ncoups] -- Anagramme du mot a trouver = [ana] Proposez un mot de n caractères parmi ana. Calculez le nombre de lettres bien placées nbp. Affichez le message suivant : [nbp] lettre(s) bien placee(s) Affichez l un des messages, selon que le joueur a ou non trouvé le mot : Super gagne en [ncoups] coups Perdu -- le mot a trouve etait [adeviner] Écrivez une fonction bienplaces(mot,n,adeviner) qui calcule et renvoie le nombre de caractères bien placés parmi les n premiers caractères d un TabCarac mot et TabCarac adeviner. Définissez la constante NCOUPS=7 (nombre de coups maximum). Écrivez une procédure devinermot(adeviner,n) qui réalise l algorithme spécifié ci-avant.

Unisciel algoprog Jeu de l anagramme [tb06] 6 Complétez votre programme en appelant la procédure précédente. Outil C++ L initialisation du générateur de nombres pseudo-aléatoires (ici avec l horloge système) 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>. Validez votre programme avec la solution. Solution C++ #include <cstdlib> #include <iostream> using namespace std; @[pgjeugram.cpp] const int NCOUPS = 7; const int NMIN = 3; const int NMAX = 10; typedef char TabCarac[NMAX]; bool estlettre(char c) return c >= a && c <= z c == _ ; int saisielettre() char c; cin >> c; while (!estlettre(c)) cout << c << " n est pas une lettre valide" << endl; cin >> c; return c; void saisirmot(tabcarac& mot, int &n) cout << "Tapez votre mot (lettres en minuscule) -- Finissez par _" << endl; n = 0; char c; c = saisielettre(); while (n < NMAX && c!= _ ) mot[n] = c; ++n; c = saisielettre();

Unisciel algoprog Jeu de l anagramme [tb06] 7 void melangermot(tabcarac& mot, int n) for (int j = n-1; j > 0; --j) int k = rand()%(j+1); char tmp = mot[k]; mot[k] = mot[j]; mot[j] = tmp; void affichermot(const TabCarac& mot, int n) for (int j = 0; j < n; ++j) cout << mot[j]; cout << endl; void copiermot(const TabCarac& mot, TabCarac& copie, int n) for (int j = 0; j < n; ++j) copie[j] = mot[j]; int rechlin(char c, const TabCarac& mot, int n) int j = 0; while (j < n && mot[j]!= c) ++j; return (j < n)? j : -1; void proposermot(tabcarac& mot, int n, const TabCarac& ana) TabCarac copie; copiermot(ana, copie, n); int j = 0; char c; while (j < n) c = saisielettre(); int k = rechlin(c, copie, n); if (k!= -1) mot[j] = c; ++j; copie[k] = _ ; affichermot(copie, n); else

Unisciel algoprog Jeu de l anagramme [tb06] 8 cout << "Lettre non presente dans l anagramme..." << endl; cout << "==> Votre Mot = "; affichermot(mot, n); int bienplaces(const TabCarac& mot, int n, const TabCarac& adeviner) int bp = 0; for (int j = 0; j < n; ++j) if (mot[j] == adeviner[j]) ++bp; return bp; void devinermot(const TabCarac& adeviner, int n) TabCarac ana; copiermot(adeviner, ana, n); melangermot(ana, n); TabCarac mot; int ncoups = 0; int nbp = 0; while (ncoups < NCOUPS && nbp!= n) ++ncoups; cout << "coup " << ncoups << " -- Anagramme du mot a trouver = "; affichermot(ana, n); proposermot(mot, n, ana); nbp = bienplaces(mot,n,adeviner); cout << nbp << " lettres bien placees" << endl; if (nbp == n) cout << "Super Gagne en " << ncoups << " coups" << endl; else cout << "Perdu" << endl; int main() TabCarac adeviner; int n; saisirmot(adeviner, n); devinermot(adeviner, n);

Unisciel algoprog Jeu de l anagramme [tb06] 9 2 Références générales Comprend []