Jeu du Baguenaudier [je03] - Exercice



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

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

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

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Programmation linéaire

Architecture des Systèmes d Information Architecture des Systèmes d Information

Plus courts chemins, programmation dynamique

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

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

TP : Gestion d une image au format PGM

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

Recherche dans un tableau

Programmation Objet - Cours II

Théorie et codage de l information

Représentation des Nombres

L exclusion mutuelle distribuée

Plan du cours Cours théoriques. 29 septembre 2014

Bases de données documentaires et distribuées Cours NFE04

Tp 1 correction. Structures de données (IF2)

TRAITEMENT AUTOMATIQUE DES LANGUES. Licence d'informatique 2ème Année Semestre 1. Département d'informatique Université de Caen Basse-Normandie

Système de contrôle du trafic d une ligne de métro Dossier de tests

Algorithmique et Programmation, IMA

TP, première séquence d exercices.

Programmation linéaire et Optimisation. Didier Smets

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

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

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

Probabilités conditionnelles Loi binomiale

TP 2 : Chiffrement par blocs

FICHE 17 : CREER UN SITE WEB

1 Recherche en table par balayage

Définition des Webservices Ordre de paiement par . Version 1.0

2. Comprendre les définitions de classes

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

M06/5/COMSC/SP1/FRE/TZ0/XX INFORMATIQUE NIVEAU MOYEN ÉPREUVE 1. Mardi 2 mai 2006 (après-midi) 1 heure 30 minutes INSTRUCTIONS DESTINÉES AUX CANDIDATS

Site Web de paris sportifs

Algorithmique I. Algorithmique I p.1/??

La classification automatique de données quantitatives

TD/TP PAC - Programmation n 3

Transmission d informations sur le réseau électrique

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

1 Mesure de la performance d un système temps réel : la gigue

Gestion distribuée (par sockets) de banque en Java

Les structures de données. Rajae El Ouazzani

Algorithme. Table des matières

Plateforme PAYZEN. Définition de Web-services

Application 1- VBA : Test de comportements d'investissements

Programmation en Java IUT GEII (MC-II1) 1

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

Introduction à MATLAB R

Sécurité et Firewall

Programmation sous QT

Plateforme «Inscription en ligne»

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

Structures algébriques

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

TP3 : Manipulation et implantation de systèmes de fichiers 1

Algorithmes récursifs

Poker. A rendre pour le 25 avril

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

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

Sillage Météo. Notion de sillage

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

Initiation à LabView : Les exemples d applications :

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

Guide d utilisation du logiciel

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

Cours de Systèmes d Exploitation

Version 7.1_5.1. Release Notes

Jean-Philippe Préaux

LES TYPES DE DONNÉES DU LANGAGE PASCAL

F7n COUP DE BOURSE, NOMBRE DÉRIVÉ

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

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

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

TP WEBSERVICES. 1 Pré-requis. 1.1 L environnement de développement. 1.2 Les librairies nécessaires 1.3 SOAPUI

Quelques tests de primalité

STAGE IREM 0- Premiers pas en Python

MPI Activité.10 : Logique binaire Portes logiques

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

ÉPREUVE COMMUNE DE TIPE Partie D

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

PIC EVAL Dev Board PIC18F97J60

Cryptologie et physique quantique : Espoirs et menaces. Objectifs 2. distribué sous licence creative common détails sur

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

Exercices du Cours de la programmation linéaire donné par le Dr. Ali DERBALA

PARTENAIRE VERS UNE GESTION DURABLE ET PERFORMANTE DE VOTRE ÉNERGIE EQUIPEMENT DE MONITORING

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

ETUDE SUR LES STAGIAIRES AYANT SUIVI UNE FORMATION DIPLOMANTE DANS LA BRANCHE DES ACTEURS DU LIEN SOCIAL ET FAMILIAL

Fiche pédagogique : ma famille et moi

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Python - introduction à la programmation et calcul scientifique

Définitions. Numéro à préciser. (Durée : )

Correction TD Algorithmique 5.3 Pile Liste 5.3 Pile

UML et les Bases de Données

Cours 1 : Qu est-ce que la programmation?

Transcription:

Jeu du Baguenaudier [je03] - Exercice Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner Unisciel algoprog Version 10 avril 2015 Table des matières 1 Présentation du jeu 1 2 Classe Baguenaudier 2 3 Stratégie du jeu 3 3.1 Analyse.................................... 3 3.2 Algorithmique, Programmation....................... 3 4 Etude, Complexité, Décurryfication 6 4.1 Nombres générés............................... 6 4.2 Complexité du jeu.............................. 6 4.3 Décurryfication des procédures récursives.................. 7 Jeu du Baguenaudier / pg-bguedierc1 (C++, TP) Cet exercice réalise le jeu du Baguenaudier (jeu de démontage, récursivité croisée) et étudie sa complexité. Dans le même ordre d idées, l exercice @[Jeu du Tracassin] réalise le jeu du Tracassin (jeu de démontage, récursivité croisée). 1 Présentation du jeu Jeu du Baguenaudier Il se joue sur une tablette divisée en n cases. «Jouer» c est ôter ou placer un pion sur une case selon que celle-ci est ou non remplie. L unique règle : à chaque coup les seules cases jouables sont la première case ou la case qui suit la première case occupée. Types de jeu Les deux types de jeux sont : Mettre n pions sur le baguenaudier initialement vide. Prendre n pions du baguenaudier initialement plein. 1

Unisciel algoprog Jeu du Baguenaudier / je03 2 Exemple d exécution Taille du jeu? 3 On remplit le baguenaudier...... *.. * *.. *.. * * * * * Nombre de coups = 6 0 1 3 2 6 7 Appuyez sur une touche pour continuer... On vide le baguenaudier... * * *. * *. *. * *. *..... Nombre de coups = 6 7 6 2 3 1 0 Éditions du jeu Il existe de nombreuses éditions de ce casse-tête, en métal ou en bois. 2 Classe Baguenaudier On modélise le jeu du baguenaudier par une classe, et on représente un baguenaudier par un tableau b de n booléens telle que b[k] est vrai s il y a un pion sur la k-ème case et faux sinon. Écrivez une classe Baguenaudier ayant pour attributs : Le nombre de pions npions (entier). La tablette b (vecteur de booléens). La liste des valeurs vals (liste d entiers) générées lors d un remplissage (montage) ou vidage (démontage) du baguenaudier.

Unisciel algoprog Jeu du Baguenaudier / je03 3 Écrivez un constructeur à un paramètre d entier n spécifiant le nombre de cases, qui initialise le nombre de pions ainsi que la taille du baguenaudier à n et la liste des valeurs à vide. Écrivez un accesseur interne getn du nombre de pions. Écrivez une méthode interne initialiser qui réinitialise la tablette à Faux avant de lancer le jeu. Écrivez une méthode interne afficher qui visualise la tablette en affichant une astérisque (*) s il y a un pion dans la case k et un point (.) sinon. Écrivez une méthode interne eval qui calcule et renvoie l évaluation du baguenaudier selon la méthode de Horner en base binaire. Écrivez une méthode interne affichervaleurs qui affiche la liste des valeurs générées. 3 Stratégie du jeu 3.1 Analyse «Jouer» c est ôter ou placer un pion sur une case selon que celle-ci est ou non remplie. L unique règle : à chaque coup les seules cases jouables sont la première case ou la case qui suit la première case occupée. Ce problème définit les deux types de jeux : Mettre n pions sur le baguenaudier initialement vide. Prendre n pions du baguenaudier initialement plein. En supposant savoir placer p pions (p n 1) sur un baguenaudier b[1..p], comment placer le pion n? En supposant savoir prendre p pions (p n 1) d un baguenaudier b[1..p], comment prendre le pion n? 3.2 Algorithmique, Programmation Ce problème réalise les stratégies de jeux.

Unisciel algoprog Jeu du Baguenaudier / je03 4 Écrivez une méthode interne placer(k) qui place le pion d indice k (entier) sur le baguenaudier puis insère son évaluation (eval) dans la liste des valeurs. De même, écrivez une méthode interne duale oter(k) qui ôte le pion d indice k (entier) du baguenaudier puis insère son évaluation (eval) dans la liste des valeurs. Écrivez une méthode interne récursive croisée mettre(n) qui met n (entier) pions sur le baguenaudier initialement vide. Aide simple Traduisez l [Analyse]. De même, écrivez une méthode interne récursive croisée prendre(n) qui prend n (entier) pions du baguenaudier initialement plein. Aide simple Traduisez l [Analyse]. Déduisez une méthode interne remplir qui remplit le baguenaudier initialement vide.

Unisciel algoprog Jeu du Baguenaudier / je03 5 De même, déduisez une méthode interne vider qui vide le baguenaudier initialement plein. Écrivez une méthode jouer qui initialise le baguenaudier, le remplit puis le vide. Écrivez un programme l invite : Taille du jeu? qui demande et saisit la taille du jeu dans n (entier). Affichez Instanciez un Baguenaudier jeu puis lancez le jeu pour n pions. Testez. Exemple d exécution. Taille du jeu? 4 On remplit le baguenaudier....... *... * *... *... * *. * * *. *. *... *... * * *. * * * * * * Nombre de coups = 11 0 1 3 2 6 7 5 4 12 13 15 Appuyez sur une touche pour continuer... On vide le baguenaudier... * * * * *. * *.. * *.. *. *. *. * * *.. * *.. *.. * *.. *....... Nombre de coups = 11 15 13 12 4 5 7 6 2 3 1 0

Unisciel algoprog Jeu du Baguenaudier / je03 6 4 Etude, Complexité, Décurryfication 4.1 Nombres générés Chaque case d un baguenaudier b ne peut prendre que deux états : libre ou occupée. En considérant que chaque b[k] est équivalent à un chiffre binaire (0 pour libre et 1 pour occupé), chaque configuration est la représentation d un entier en base 2. Exemple La configuration b = [F, V, F, V, V, F, V, V ] (où F est Faux, V est Vrai) représente l entier 0b11011010 (valeur dans l ordre inverse). Ce jeu engendre une suite de nombres et le passage d un nombre au suivant s effectue en changeant un unique chiffre binaire : c est un code de Gray. Quelle est la suite des nombres engendrés par le jeu mettre pour n = 4? Vérifiez qu il y a 218 nombres générés pour n = 8. Déterminez la suite engendrée par chacun des jeux. Généralisez par récurrence. 4.2 Complexité du jeu Ce problème étudie la complexité du jeu en nombre d opérations, en supposant que les opérations oter et placer un pion nécessitent le même temps. Soient P (n) et M(n) le nombre d opérations effectuées par prendre(n) et mettre(n). Écrivez les relations vérifiées par P (n) et M(n). Écrivez la relation de récurrence de la suite A définie par : n 0, P (n) = M(n) = A(n) + a (*) Résolvez la relation pour que A soit linéaire. Concluez en terme de complexité des procédures récursives.

Unisciel algoprog Jeu du Baguenaudier / je03 7 4.3 Décurryfication des procédures récursives Ce problème (optionnel) réalise la décurryfication des procédures récursives. Montrez que le jeu mettre est entièrement déterminé à chaque coup. Aide simple Vérifiez que le premier coup est imposé, puis utilisez le fait qu un coup ne doit pas défaire ce qui a été fait au coup précédent pour constater que : 1. Le premier pion est joué un coup sur deux. 2. Les autres coups sont complètement déterminés. Ainsi il n y a aucun choix dans le jeu mettre : il est entièrement déterminé à chaque coup. De même, montrez que le jeu prendre est entièrement déterminé à chaque coup. Décurryfiez les procédures récursives.