Jeu de la vie [si05] - Exercice



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

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

AGASC / BUREAU INFORMATION JEUNESSE Saint Laurent du Var - E mail : bij@agasc.fr / Tel : CONSIGNE N 1 :

Comment sélectionner des sommets, des arêtes et des faces avec Blender?

Initiation à LabView : Les exemples d applications :

Procédure de sauvegarde pour AB Magique

L exclusion mutuelle distribuée

GUIDE PRATIQUE déplacements professionnels temporaires en France et à l étranger

FONCTIONS DE PLUSIEURS VARIABLES (Outils Mathématiques 4)

Fonctions de deux variables. Mai 2011

Chaque ordinateur est constitué de différentes unités de stockage de données (Disque dur, Graveur ) que l on peut imaginer comme de grandes armoires.

Comment se connecter au VPN ECE sous vista

Cahier Technique Liaison Comptabilité Api / Sage ECF

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

NOTICE D' UTILISATION CAMWORKS FRAISAGE. Luc Vallée Lycée Blaise Pascal Segré

Gestion des documents avec ALFRESCO

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Documentation Technique du programme HYDRONDE_LN

Cours pratique Excel. Dans chacune des feuilles, les donnés sont déjà entrées afin de gagner du temps.

PAGE 1. L écran du logiciel d Open Office Draw. Barre de menu: Les commandes du logiciel

CREER ET ANIMER SON ESPACE DE TRAVAIL COLLABORATIF

Exporter des écritures. Importer des écritures. Depuis EBP Comptabilité.

Note de cours. Introduction à Excel 2007

Guide de l Utilisateur

CONFIGURATION DE L AUTOMATE SIEMENS

Création du projet : 1 sur 13

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Le langage C. Séance n 4

Les algorithmes de base du graphisme

Support de formation Notebook

CREATION D UNE EVALUATION AVEC JADE par Patrick RUER (

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

Uniformiser la mise en forme du document. Accélère les mises à jour. Permets de générer des tables de matières automatiquement.

Découvrir l'ordinateur (niveau 2)

Comment insérer une image de fond?

TP1 : Initiation à Java et Eclipse

Blog? Qu est-ce qu un blog?

GUIDE D UTILISATION. Gestion de compte. à destination des CFA

Styler un document sous OpenOffice 4.0

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

ANIMER UNE COMMUNAUTÉ CONSTRUCTION21

MODE D EMPLOI OUTLOOK ADD-IN POUR SELECTLINE

Dans l idéal, ceci devrait être fait en amont pour chaque image envoyée sur l espace de stockage de votre site internet.

Création d une SIGNATURE ANIMÉE avec PHOTOFILTRE 7

Créer son blog pas à pas

Silhouette Studio Leçon N 2

GUIDE D UTILISATION. Gestion de compte. à destination des entreprises (Employeurs et Organismes de Formation)

FICHE 17 : CREER UN SITE WEB

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Mini_guide_Isis.pdf le 23/09/2001 Page 1/14

EXTRACTION ET RÉINTÉGRATION DE COMPTA COALA DE LA PME VERS LE CABINET

Manuel d utilisation DeveryLoc

Module Planification

Niveau 1. Atelier d'initiation à l'ordinateur ... Fondation de la Bibliothèque Memphrémagog inc. Magog (Québec) J1X 2E7 Tél.

Installation.Net Framework 2.0 pour les postes utilisant Windows 8/8.1.

Support de TD ArcGIS Introduction à l automatisation et au développement avec ArcGIS 10.1 JEAN-MARC GILLIOT e année ingénieur

TD de supervision. J.P. Chemla. Polytech Tours Département productique 2ème année

Mise à jour d avast! et de vos logiciels Ciel

Introduction à Eclipse

SPECIFICATIONS TECHNIQUES : Gestion des Médicaments et des commandes de médicaments

Securexam Consignes pour l EFU Les 2, 3 et 4 juin 2015

I. Introduction aux fonctions : les fonctions standards

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)

FOCUS Evolution. Lisez-Moi. Version FE 7.0.t

Manuel d utilisation

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

Programmation Visual Basic. Visite guidée d'un programme Visual Basic 6.0

Avertissement : Nos logiciels évoluent rendant parfois les nouvelles versions incompatibles avec les anciennes.

PRISE EN MAIN D UN TABLEUR. Version OPEN OFFICE

Introduction à Windows 8

TABLE DES MATIÈRES 1. DÉMARRER ISIS 2 2. SAISIE D UN SCHÉMA 3 & ' " ( ) '*+ ", ##) # " -. /0 " 1 2 " 3. SIMULATION 7 " - 4.

Sommaire. Images Actives Logiciel libre développé par le CRDP de l académie de Versailles 2 Rue Pierre Bourdan Marly le Roi

Plateforme «Inscription en ligne»

La Programmation Orientée Agent Les Agents Réactifs

L espace de travail de Photoshop

1 Démarrer L écran Isis La boite à outils Mode principal Mode gadget Mode graphique...

INTRODUCTION. Pour réaliser une pièce sur Charlyrobot, il faut le faire en trois étapes :

Tutoriel : logiciel de présentation Openoffice Impress

1 CRÉER UN TABLEAU. IADE Outils et Méthodes de gestion de l information

PIC EVAL Dev Board PIC18F97J60

AGASC / BUREAU INFORMATION JEUNESSE Saint Laurent du Var Tel : E mail : bij@agasc.fr CONSEILS ET ASTUCES

Dans l Unité 3, nous avons parlé de la

Utilisation du logiciel GALAAD

Etape 1 : Récupération de la clé d installation

Prise en main du logiciel Smart BOARD

Master IMA - UMPC Paris 6 RDMM - Année Fiche de TP

iphoto Premiers contacts Découvrez iphoto et apprenez à importer et organiser vos photos et à créer un diaporama ou un livre.

Module 1 : Tableau de bord Excel * 2010 incl.*

MODE D EMPLOI. Plateforme de réflexion et de recherche de la CIDEGEF pour un modèle de management francophone

Pour accéder au Prêt numérique

Mode d'emploi abrégé du GPS GeoExplorer3 et du Software GPS Pathfinder Office

CONSULTATION SUR PLACE

GUIDE D UTILISATION DU LOGICIEL DE TELE-MAINTENANCE. TEAM VIEWER Version 7.

Jura Miniguide Conseils pour mieux utiliser Jura

Manuel d'installation de GESLAB Client Lourd

Sélection du contrôleur

Continuité et dérivabilité d une fonction

Transcription:

Jeu de la vie [si05] - Exercice Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner Unisciel algoprog Version 24 avril 2015 Table des matières 1 Jeu de la vie / pg-jeuviea1 (C++) 1 1.1 Représentation du milieu........................... 1 1.2 Affichage et initialisation du terrain..................... 3 1.3 Création de la population initiale...................... 4 1.4 Calcul de la génération suivante....................... 5 1.5 Programme principal............................. 7 1.6 Annexe : exemples de configurations initiales................ 8 2 Optionnel : Version graphique 8 2.1 Mode graphique................................ 8 2.2 Jeu de la vie.................................. 9 1 Jeu de la vie / pg-jeuviea1 (C++) Mots-Clés Simulation, Graphique, Algorithmique, Programmation, C++. Requis Axiomatique impérative. Optionnel Graphique. Cet exercice réalise le jeu de la vie de Conway qui simule le développement de cellules vivantes. Le programme demande la taille du terrain, l occupation initiale du terrain par les cellules, le nombre de générations à calculer, affiche le terrain initial puis calcule et affiche les générations suivantes du terrain. 1.1 Représentation du milieu Le développement des cellules se fait de génération en génération. Lorsque l on passe d une génération à la suivante, une cellule peut naître, continuer à vivre ou mourir. Le milieu de développement des cellules est un terrain quadrillé et chaque case du terrain est soit vide, soit occupée par une cellule (figure 1a). 1

Unisciel algoprog Jeu de la vie [si05] 2 Le terrain est donc représenté par un tableau à deux dimensions. Une case du tableau contiendra 0 si la case du terrain est vide, 1 si la case est occupée par une cellule. Définissez le type TabCellules représentant un tableau de cellules d entiers de hauteur maximale HMAX=75 et de largeur maximale LMAX=40. Définissez alors le type Terrain comme étant une structure incluant : Des entiers hauteur et largeur mémorisant les dimensions effectives du terrain. Un TabCellules cells mémorisant l état des cellules. Lorsqu on passe à la génération suivante, l évolution d une case (i, j) du terrain se fait en considérant le nombre total de cellules se trouvant dans les 8 cases voisines qui l entourent (figure 1b). Les cases situées sur le bord du terrain posent un problème : lequel? Elles n ont pas toutes les huit cellules voisines. Pour remédier simplement au problème ci-avant, le terrain utilisé sera entouré d une bordure constituée de cases toujours vides. Ainsi si w et h sont la largeur et la hauteur du terrain données par l utilisateur, le terrain sera constitué des cases (i, j) avec i variant de 0 à h + 1 et j variant de 0 à w + 1, mais le calcul de la génération suivante ne se fera que sur les cases de 1 à h et de 1 à w. Commencez par écrire une fonction evalcase(tr,ix,jx) qui renvoie la valeur (entier) de la case en (ix,jx) d un Terrain tr. De même, écrivez une procédure fixercase(tr,ix,jx,val) qui fixe la valeur val (entier) de la case en (ix,jx) d un Terrain tr. Validez vos déclarations, votre fonction et votre procédure avec la solution.

Unisciel algoprog Jeu de la vie [si05] 3 C++ @[jeuviea1a.cpp] 1.2 Affichage et initialisation du terrain Le terrain sera affiché à l écran avec des caractères : une cellule active sera affichée avec O et une cellule vide avec.. Écrivez une procédure afficherterrain(tr) qui affiche à l écran un Terrain tr. Écrivez une procédure initialisermilieu(tr) qui initialise le tableau (terrain utilisé + bordure) d un Terrain tr. Le tableau ne doit contenir que des cases vides. Soit la procédure saisirentier(n,a,b) qui demande et saisit un entier dans n jusqu à ce qu il soit dans l intervalle d entiers [a..b]. Elle affiche l invite : Entier dans [[a]..[b]]? C++ @[saisirentiera1.cpp] Écrivez une procédure saisirdimensions(tr) qui demande et saisit les dimensions (hauteur et largeur) d un Terrain tr. Affichez les invites : Hauteur du terrain? Largeur du terrain? Validez vos procédures avec la solution. C++ @[jeuviea1b.cpp] Écrivez une procédure test_init qui déclare un Terrain tr, demande ses dimensions (hauteur et largeur), l initialise et l affiche.

Unisciel algoprog Jeu de la vie [si05] 4 Testez. Validez votre procédure avec la solution. C++ @[pg-jeuviea1b.cpp] 1.3 Création de la population initiale La création de la population initiale se fait en activant des cellules sur un terrain vide. Soit la fonction dansintervalle(n,a,b) qui renvoie Vrai si un entier n est dans l intervalle [a..b] d entiers, Faux sinon. C++ @[dansintervallea1.cpp] Écrivez une procédure activercellules(tr) qui, pour un terrain tr, demande à l utilisateur les coordonnées (i, j) de chaque cellule à activer, une coordonnée de (-1,-1) indiquant que l on ne veut plus activer de cellules. Validez votre procédure avec la solution. C++ @[jeuviea1c.cpp] Copiez/collez la procédure test_init en la procédure test_placer. Complétez-la et modifiez-le de sorte qu après avoir initialisé un terrain de dimensions demandée à l utilisateur, elle demande à l utilisateur d activer des cellules en réaffichant le terrain à chaque fois.

Unisciel algoprog Jeu de la vie [si05] 5 Testez. Validez votre procédure avec la solution. C++ @[pg-jeuviea1c.cpp] 1.4 Calcul de la génération suivante Lorsque l on passe à la génération suivante, l évolution d une case (i, j) du terrain se fait en considérant le nombre total nc de cellules se trouvant dans les 8 cases voisines qui l entourent (figure 1b) : Si la case est vide et si nc = 3 : une cellule naît dans cette case. Sinon (la case est active) : Si nc > 3 : la cellule meurt étouffée. Si nc < 2 : la cellule meurt d isolement. Sinon la cellule continue à vivre. Ainsi, le terrain de la figure 2(a), génération i, évolue à la génération suivante i + 1 en le terrain de la figure 2(b) selon les règles données ci-avant.

Unisciel algoprog Jeu de la vie [si05] 6 Écrivez une fonction nvoisins(tr,ix,jx) qui calcule et renvoie le nombre de cellules actives dans le voisinage d une cellule en (ix,jx) d un Terrain tr. Écrivez une procédure copierterrain(tr,dp) qui copie un Terrain tr dans un Terrain dp. Aide simple Recopiez les champs et les cellules effectives du terrain tr. Écrivez alors une procédure generationsuivante(tr) qui, pour un Terrain tr, passe à la génération suivante. Attention : Le calcul du nombre de cellules voisines doit se faire en considérant la configuration de départ du terrain (à sauver donc dans un terrain temporaire grâce à la procédure copierterrain) et non pas la configuration en cours de modification. Enfin écrivez alors une procédure jouer(tr) qui, pour un Terrain tr, passe à la génération suivante puis affiche le nouveau terrain jusqu à ce que l utilisateur tape la touche q pour signifier qu il souhaite «quitter».

Unisciel algoprog Jeu de la vie [si05] 7 Outil C++ Après l affichage du terrain, ajoutez la ligne : cin.get(c); Cela stoppera le programme jusqu à ce que vous tapiez sur une touche (c est une variable caractère à déclarer). Validez votre fonction et vos procédures avec la solution. C++ @[jeuviea1d.cpp] 1.5 Programme principal Écrivez une procédure test_jouer qui demande la taille du terrain, l occupation initiale du terrain par les cellules, affiche le terrain initial puis calcule et affiche les générations suivantes du terrain. Testez. Validez votre procédure avec la solution. C++ @[pg-jeuviea1d.cpp]

Unisciel algoprog Jeu de la vie [si05] 8 1.6 Annexe : exemples de configurations initiales 2 Optionnel : Version graphique 2.1 Mode graphique Afin de réaliser des graphiques, [C++] Récupérez les fichiers graphics.h et winbgi.cpp, copiez-les dans le dossier contenant (le fichier cpp de) votre projet et ajoutez-les comme éléments existants dans votre projet. Ajoutez dans la partie des #include de votre programme : #include "graphics.h" Écrivez alors les procédures de jeux avec illustration graphique sous la forme suivante : void jeuxgraphiques() { opengraphsize(600,400); //... le jeu... getch(); closegraph(); } Enfin ajoutez la ligne suivante dans votre fichier projet (pour la bibliothèque graphique) : -lgdi32

Unisciel algoprog Jeu de la vie [si05] 9 Mode standard En mode standard, il y a renversement des axes : le point (0,0) se trouve dans le coin supérieur gauche. 2.2 Jeu de la vie Vous pouvez faire une version graphique avec winbgi. On choisit pour dessiner le terrain une taille de bordure et une taille de cellule. Pour une cellule active, on affiche un cercle de rayon taille/2. Définissez les constantes BORDURE de valeur 50, TAILLEC de valeur 20 et RAYONC de valeur TAILLEC/2. La case (ix,jx) est alors dans le carré de taille côté dont le point en haut à gauche a pour coordonnées (BORDURE+jx*TAILLEC,BORDURE=ix*TAILLEC). Écrivez une procédure calculerxy(x,y,ix,jx) qui, étant données les coordonnées d une cellule (ix,jx), calcule les coordonnées écran dans (x,y) (entier). Déduisez une procédure calculerlc(ix,jx,x,y) qui, étant données les coordonnées écran (x,y) (entier), calcule les coordonnées d une cellule dans (ix,jx). Écrivez alors une procédure afficherterraingr(tr) qui affiche de façon graphique le terrain : après avoir effacé le terrain, on affiche les carrés de toutes les cases puis on affiche les cases (ix,jx) qui contiennent une cellule en traçant un cercle centré en (BORDURE+jx*TAILLEC+RAYONCC,BORDURE+ix*TAILLEC+RAYONCC) de rayon côté/2. Validez vos procédures avec la solution. C++ @[jeuviea1e.cpp]

Unisciel algoprog Jeu de la vie [si05] 10 Écrivez une procédure activercellulesgr(tr) qui active graphiquement les cellules en cliquant avec la souris sur les cellules. On s arrête quand on clique hors du terrain. Outil C++ La fonction getmouse(int& x,int& y) attend un clic de souris et récupère ses coordonnées dans les entiers x et y. Écrivez une procédure jouergr(tr) équivalente à la procédure jouer(tr) qui permet de jouer en mode graphique. Validez vos procédures avec la solution. C++ @[jeuviea1f.cpp] Écrivez une procédure test_jouergr qui demande les dimensions pour le dessin, ouvre la fenêtre et organise correctement la saisie des cases et l évolution des cellules. Testez. Validez votre procédure avec la solution. C++ @[pg-jeuviea1f.cpp]