APPLICATION. Définition des classes : On va définir - une classe carte - une classe piledecartes - une classe joueur



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


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

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

TP : Gestion d une image au format PGM

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

2. Comprendre les définitions de classes

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

Programme Compte bancaire (code)

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

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)

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

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

as Architecture des Systèmes d Information

Utilisation d objets : String et ArrayList

Poker. A rendre pour le 25 avril

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

Programmer en JAVA. par Tama

Informatique III: Programmation en C++

Algorithmique et Programmation, IMA

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours 1: Java et les objets

Cours de Systèmes d Exploitation

Langage Java. Classe de première SI

I. Introduction aux fonctions : les fonctions standards

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

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

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

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

LE LANGAGE C++ ENAC 1997 A. DANCEL

Recherche dans un tableau

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

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

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

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

S initier aux probabilités simples «Question de chance!»

Introduction à la programmation concurrente

Introduction au pricing d option en finance

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

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

Probabilités. I Petits rappels sur le vocabulaire des ensembles 2 I.1 Définitions... 2 I.2 Propriétés... 2

Corrigé des exercices sur les références

S initier aux probabilités simples «Question de chance!»

Une introduction à Java

CALCUL DES PROBABILITES

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Claude Delannoy. 3 e édition C++

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

Chapitre 2 Devine mon nombre!

Premiers Pas en Programmation Objet : les Classes et les Objets

Plan du cours. Historique du langage Nouveautés de Java 7

Les structures. Chapitre 3

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

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

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

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

Java Licence Professionnelle CISII,

Package Java.util Classe générique

Programmation en Java IUT GEII (MC-II1) 1

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Programmation avec des objets : Cours 7. Menu du jour

S initier aux probabilités simples «Un jeu de cartes inédit»

Les processus légers : threads. Système L3, /31

Cours d Algorithmique et de Langage C v 3.0

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

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

COMPARAISONDESLANGAGESC, C++, JAVA ET

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

1 Recherche en table par balayage

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

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Projet de programmation (IK3) : TP n 1 Correction

Les structures de données. Rajae El Ouazzani

Développement Logiciel

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

TD/TP PAC - Programmation n 3

Conventions d écriture et outils de mise au point

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

PROJET 1 : BASE DE DONNÉES REPARTIES

STAGE IREM 0- Premiers pas en Python

Exercices INF5171 : série #3 (Automne 2012)

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

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

Programmation par les Objets en Java

Feuille d exercices 2 : Espaces probabilisés

Classes et Objets en Ocaml.

Les règles de base du poker :

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

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Auto-évaluation Programmation en Java

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

Les probabilités. Chapitre 18. Tester ses connaissances

SUPPORT DE COURS. Langage C

Programmation en C/C++

INF 321 : mémento de la syntaxe de Java

Transcription:

APPLICATION On souhaite écrire un programme qui permet à l utilisateur de jouer au jeu de cartes 21. Principe : L utilisateur reçoit une carte à la fois et après chaque carte il décide s il continue ou non. Le but est, en additionnant les points des cartes que l utilisateur a en main, d approcher le plus possible 21 sans dépasser cette valeur. Si l utilisateur dépasse 21 il a perdu, sinon c est au tour de l ordinateur de jouer. Si lorsqu il s arrête il a dépassé 21 ou a moins que l utilisateur, c est celui-ci qui a gagné, sinon c est l ordinateur qui gagne. Un as vaut soit 1 soit 14. Définition des classes : On va définir - une classe carte - une classe piledecartes - une classe joueur La classe carte doit permettre de : - créer une carte : constructeur - en connaître sa valeur : valeur - écrire ses informations (couleur et valeur) : ecrire enum couleur trefle, carreau, coeur, pique ; class carte public : carte (couleur c=trefle, int v=1) ; int valeur () return v ; void ecrire () ; private : couleur c ; int v ; ; carte::carte (couleur cc, int vv) assert (vv >= 1 && vv <= 13) ; c=cc ; v=vv ; - 27 -

Ici on utilise une fonction standard void assert (int expression) qui indique un message d erreur si l expression est false. Ne pas oublier : include <cassert> void carte::ecrire () // écrit la couleur suivie de la valeur de la carte const char *tab1 = trèfle, carreau, coeur, pique ; const char *tab2 = valet, dame, roi ; if (v==1) cout << as ; if (v<=10) cout << v ; cout << tab2 v-11 ; cout << de << tab1 c ; La classe piledecartes doit permettre de représenter aussi bien tout le jeu (52 cartes) que la pile de cartes qu a en main un joueur. Les opérations à faire sont : - créer une pile vide (=constructeur) - créer une nouvelle pile qui correspond aux 52 cartes : nouvpile - mélanger ces cartes : melanger - savoir combien de cartes il y a dans la pile : nombrecartes - prendre une carte dans la pile : prendre - mettre une carte sur la pile : mettre - connaître la carte se trouvant à la position n0 dans la pile : regarder (n0 = 1 pour le sommet de la pile) - enlever toutes les cartes de la pile : vider class piledecartes public : piledecartes () : nombre(0) void nouvpile () ; void melanger () ; int nombrecartes () return nombre ; carte prendre () ; void mettre (carte k) ; carte regarder (int no) ; void vider () nombre=0 ; - 28 -

private : carte pile 52 ; int nombre ; ; Pour mélanger les cartes, on va utiliser la fonction standard rand qui permet d obtenir des nombres aléatoires. Le processus sera initialisé avec la fonction srand à laquelle on passera en paramètre le résultat de la fonction time. Donc, ne pas oublier : include <cstdlib> include <ctime> Il nous reste 5 fonctions membres à définir : void piledecartes::nouvpile () int n=0 ; for (couleur c=trefle; c<=pique; c=couleur(c+1)) for (int v=1; v<=13; v++) pile n++ = carte(c,v) ; nombre=52 ; void piledecartes::melanger () srand (time (0)) ; for (int i=1; i<1000; i++) int n1 = rand () % nombre ; int n2 = rand () % nombre ; carte temp = pile n1 ; pile n1 = pile n2 ; pile n2 = temp ; carte piledecartes::prendre () assert (nombre>0) ; return pile --nombre ; - 29 -

void piledecartes::mettre (carte k) assert (nombre<52) ; pile nombre++ = k ; carte piledecartes::regarder (int no) assert (no>=1 && no<=nombre) ; return pile nombre-no ; La classe joueur doit permettre de : - jouer = prendre une carte au sommet du paquet et la mettre dans la main : jouer - compter les points des cartes en main, tant pour l utilisateur que pour l ordinateur : points classe joueur public : joueur (piledecartes& paquetdecartes, bool estordi) : paquet(paquetdecartes), ordi(estordi) ; int jouer () ; private : piledecartes enmain ; piledecartes& paquet ; const bool ordi ; int points () ; ; N.B. - si chaque joueur a son propre paquet de cartes en main, le paquet dans lequel on puise est commun aux deux joueurs paquet est une référence : & - ordi est déclaré comme constant car cet attribut du joueur ne change pas - la fonction points est privée car utilisée en interne par la fonction jouer - 30 -

int joueur::points () int p=0, nbreas=0 ; // initialise le nombre de points et d as à 0 for (int i=1; i<=enmain.nombrecartes(); i++) int v=enmain.regarder (i).valeur () ; if (v==1) // c est un as p+=14 ; nbreas++ ; p+=v ; for (int j=1; j<= nbreas && p>21; j++) p-=13 ; // si on dépasse 21, on compte l as pour 1 return p ; La fonction jouer utilise le booléen continuer pour savoir si on veut une carte supplémentaire ou non : int joueur::jouer () bool continuer = true ; int p ; while (continuer) carte k= paquet.prendre () ; enmain.mettre (k) ; p=points () ; if (ordi) // c est l ordinateur qui joue cout << L ordi a pris ; k.ecrire () ; cout << endl ; if (p>=16) // l ordi décide d arrêter quand il arrive // à 16 points cout << L ordi a << p << points << endl ; continuer = false ; - 31 -

enmain.vider () ; return p ; // c est l utilisateur qui joue cout << Vous avez pris ; k.ecrire () ; cout << endl ; cout << Vous avez << p << points << endl ; if (p<21) char reponse 3 ; cout << Une carte supplémentaire? ; cin >> reponse ; continuer = reponse 0 == o ; continuer = false ; Reste la fonction principale dans laquelle on ajoutera les include nécessaires : int main () piledecartes paquet ; joueur vous (paquet, false) ; joueur moi (paquet, true) ; char reponse 3 ; bool continuer = true ; cout << Bonjour! << endl ; while (continuer) cout << Un nouveau jeu? << endl ; cin >> reponse ; continuer = reponse 0 == o ; if (continuer) paquet.nouvpile () ; paquet.melanger () ; int p1=vous.jouer () ; if (p1>21) cout << Vous avez perdu! << endl ; - 32 -

return 0 ; if (p1==21) cout << Vous avez gagné! << endl ; // l ordinateur doit jouer int p2=moi.jouer () ; if (p2<=21 && p2>=p1) cout << Vous avez perdu! << endl ; cout << Vous avez gagné! << endl ; Exercice : donner un exemple de ce que ce programme imprimerait à l exécution. - 33 -