• Aucun résultat trouvé

PG208, Exercice préparatoire

N/A
N/A
Protected

Academic year: 2022

Partager "PG208, Exercice préparatoire"

Copied!
6
0
0

Texte intégral

(1)

PG208, Exercice préparatoire

Bertrand LE GAL

, Jérémie CRENNE

, Guillaume DELBERGUE

et Thibaud TONNELLIER

§

Filière électronique 2

eme

année - Année universitaire 2014-2015

Avant d’aborder le projet de conception objet, une séance de mise en pratique des notions vues en cours est indispensable. Afin d’optimiser le déroulement de la séance, il vous est demandé de préparer à l’avance l’exercice. Cette préparationpréliminairesera évaluée par votre enseignant.

Présentation du sujet de l’étude

Afin d’illustrer au mieux les différentes notions vues en cours, nous avons décidé de vous faire dévelop- per une classe permettant de mémoriser les informations relatives à une personne. Cette classe nommée Personne devra permettre de décrire un individu sachant que l’on souhaite avoir autant d’informations que dans la phrase suivante :

=⇒Mr John Doe est né en 1969 (43 ans), il est célibataire.

Travail préparatoire

Dans ce TP vous allez être à la fois concepteur et utilisateur de la classe Personne. Votre première tache consiste à définir la structure de la classe (attributs/méthodes). Pour cela vous devrez identifier les informations à mémoriser à partir de l’exemple précédent. Durant cette étape, vous prendrez soin d’utiliser à bon escient les niveaux de visibilité offerts par le langage C++. De plus, afin d’accéder aux attributs de la classe, vous définirez les accesseurs et mutateurs qui vous semblent nécessaires. Une fois ce travail terminé, vous n’aurez plus qu’à développer le code associé aux méthodes.

Enfin, vous écrirez un programme (main) qui permet de tester le bon fonctionnement de votre classe.

Pour cela vous créerez deux Personnes et afficherez leurs informations.

bertrand.legal(at)ims-bordeaux.fr

jeremie.crenne(at)ims-bordeaux.fr

guillaume.delbergue(at)ims-bordeaux.fr

§thibaud.tonnellier(at)ims-bordeaux.fr

(2)

Remarque 1 : afin de vous simplifier la vie, vous pourrez utiliser toutes les classes disponibles dans la STL.

Remarque 2: votre classe devra posséder une méthode publique nomméevoid af f icheInf ormations() qui aura pour rôle d’afficher les informations à l’écran (tel que cela est présenté dans l’énoncé).

Remarque 3 : votre classe possédera un constructeur dont le nombre de paramètres sera suffisant pour permettre la création d’une Personne à partir de toutes les informations nécessaires.

Travail demandé en séance

Etape 1

Dans un premier temps utiliser l ?outil QtCreator afin de coder la classe et le programme main que vous avez imaginé dans le travail préparatoire. Vérifier le fonctionnement de votre code.

Etape 2

Nous souhaitons maintenant pouvoir créer des personnes à partir d’informations contenues dans des fi- chiers textuels. Ajouter à votre classe deux méthodes nomméesbool loadF romF ile(const char∗f ilename) etbool saveT oF ile(const char∗f ilename).

De plus, ajouter un constructeur dans votre classe afin de permettre la création d ?une Personne à partir du nom du fichier qui contient les informations. Vous testerez votre programme en enregistrant les 2 personnes que vous avez créées précédemment « en dur ».

Remarque 4 : pour vous simplifier la vie, vous pourrez mémoriser une seule information par ligne.

Etape 3

Nous souhaitons pouvoir gérer simplement un ensemble de personnes. Les informations relatives à ces Personnes seront mémorisées dans des fichiers sauvegardés sur le disque dur. Le nom des fichiers sera standardisé personne_XX.txtavec XX un nombre entier sur 2 digits. Modifiez votre programme afin dans un premier temps de charger tous les fichiers. Puis d’afficher les informations relatives aux personnes.

Enfin de faire le proprement le ménage.

Etape 4

Nous souhaitons rajouter des fonctionnalités à la classe Personne. Toutefois nous ne souhaitons pas alourdir l’occupation mémoire de cette dernière. Afin de répondre à ce besoin, vous allez devoir définir

(3)

une nouvelle classe (ExtPersonne).

Nous souhaitons que cette nouvelle classe modifie l’affichage des informations relative à une personne de la manière suivante :

=⇒[ACTIF : J.DOE-69] Mr John Doe est né en 1969 (43 ans), il est célibataire.

La clef a insérer au début de l’affichage des informations est constituée de 4 champs : le statut de la personne, l ?initiale du prénom, le nom de famille en majuscule ainsi que les deux derniers chiffres de l’année de naissance. Le statut d’une personne sera sélection en fonction de l’age de la personne :

— 0≤age <12⇒EN F AN T

— 12≤age <18⇒ADOLESCEN T

— 18≤age <65⇒ACT IF

— 65≤age <99⇒RET RAIT E Ecrivez cette nouvelle classe :

— sans utiliser d’attributs supplémentaires,

— en prenant soin de minimiser le nombre de lignes de code que vous écrivez.

Modifiez votre main pour tester cette nouvelle classe.

Etape 5

Normalement dans la question précédente, vous avez du remplacer toutes les utilisations de la classe Personne par des utilisations de la classe ExtPersonne. Ce choix est discutable, en effet, des ExtPersonnes sont aussi des Personnes (par construction). Modifiez votre programme en conséquence & corriger le problème qui vient d’apparaître. . .

(4)

Exemples de codes sources utiles

Le premier exemple de code vous montre comment il est possible de lire l’ensemble d’un fichier de type textuel en C++. Cet exemple lit les informations ligne par ligne et les affiche à l’écran.

#include <i o s t r e a m >

#include <f s t r e a m >

#include <s t r i n g >

u s i n g namespace s t d ;

void main ( ) {

s t r i n g STRING ; i f s t r e a m i n f i l e ;

i n f i l e . open (" names . txt ") ; while( ! i n f i l e . e o f )

{

g e t l i n e ( i n f i l e , STRING ) ; c o u t << STRING ;

}

i n f i l e . c l o s e ( ) ; }

Dans ce second exemple, le code C++ présenté permet de lire une chaîne de caractère tapée par l’utilisateur dans la console. La lecture de la chaîne de caractères est réalisée lorsque l’utilisateur appuie sur la touchereturn.

void l e c t u r e _ c l a v i e r ( ) {

s t r i n g c h a i n e ;

c o u t << " Entrez ␣ une ␣ phrase ␣:␣" << e n d l ; g e t l i n e ( c i n , c h a i n e ) ;

c o u t << " La ␣ phrase ␣ est ␣:␣" << c h a i n e << e n d l ; }

Ce troisième exemple illustre les méthodes disponibles dans la classe string. Ces dernières vous seront sûrement utiles lors de votre développement.

void t e s t _ s t r i n g ( ) {

s t r i n g c = " Voici ␣ une ␣ phrase ␣!";

c o u t << " Taille ␣ de ␣ la ␣ chaine ␣␣␣␣␣:␣" << c . l e n g t h ( ) << e n d l ;

(5)

c o u t << " Pos .␣ du ␣ premier ␣ espace ␣␣:␣" << c . f i n d ("␣") << e n d l ; c o u t << " Pos .␣ du ␣ dernier ␣ espace ␣␣:␣" << c . r f i n d ("␣") << e n d l ; c o u t << " Pos .␣ du ␣ mot ␣ ’une ’␣␣␣␣␣␣␣:␣" << c . f i n d (" une ") << e n d l ;

c o u t << " Premier ␣ mot ␣␣␣␣␣␣␣␣␣␣␣␣␣:␣" << c . s u b s t r ( 0 , c . f i n d ("␣") ) << e n d l ; c o u t << " Comparaison ␣( true )␣␣␣␣␣␣:␣" << c . compare ( c ) << e n d l ;

c o u t << " Comparaison ␣( false )␣␣␣␣␣:␣" << c . compare ( " TOTO " ) << e n d l ; }

Ce quatrième exemple vous permet de découper une chaîne de caractères en sous parties en fonction d’un séparateur (ici le caractère "=").

void d e c o u p e _ s t r i n g ( ) {

s t r i n g c ;

c o u t << " Entrez ␣ une ␣ phrase ␣:␣" << e n d l ; g e t l i n e ( c i n , c ) ;

i n t t a i l l e = c . s i z e ( ) ; i f( t a i l l e != 0 ) {

i n t pos = c . f i n d (’= ’) ;

c o u t << " Ligne ␣ lue ␣:␣*" << c << "*" << e n d l ; c o u t << " Position :␣" << pos << e n d l ;

c o u t << " Mot ␣1␣:␣" << c . s u b s t r ( 0 , pos ) << e n d l ;

c o u t << " Mot ␣2␣:␣" << c . s u b s t r ( pos +1 , t a i l l e−( pos +1)) << e n d l ; }

}

Ce cinquième exemple vous indique la procédure à suivre pour récupérer un pointeur sur la chaine de caractère contenue dans un objet de type string.

void p o i n t e u r _ c h a r ( ) {

s t r i n g STRING ;

c o u t << " Votre ␣ message ␣=␣"; g e t l i n e ( c i n , STRING ) ;

char∗ c h a i n e = STRING . c _ s t r ( ) ;

c o u t << " INTEGER ␣=␣" << a t o i ( c h a i n e ) ; }

Ce dernier exemple vous montre une méthode efficace pour convertir les données contenues dans une chaîne de caractères en majuscules. Cette approche nécessite l’inclusion de la bibliothèque< algorithm >

dans votre programme.

(6)

s t r i n g str_to_upper ( s t r i n g s t r ) {

s t r i n g str_up = s t r ;

s t d : : t r a n s f o r m ( str_up . b e g i n ( ) , str_up . end ( ) , str_up . b e g i n ( ) , : : t o u p p e r ) ; c o u t << s t r << e n d l ;

return str_up ; }

Références

Documents relatifs

le matériel utilisé (chaque parent ouvre le cartable de son enfant), présentation du matériel de l'atelier lecture et du cahier de textes qui reste en classe. les

Mais on sait aussi que 110 élèves étudient à la fois l'anglais et l'espagnol.. Combien d'élèves n'apprennent aucune de ces

Applications des mathématiques à la physique, la chimie, l'informatique et les sciences industrielles pour

− Apprentissage des méthodes et des outils pour l’enseignement des mathématiques, de la physique et de la chimie, algorithmique, initiation à la programmation. − Exploitation

Applications des mathématiques à la physique, la chimie, et les sciences industrielles pour

− Apprentissage des méthodes et des outils pour l’enseignement des mathématiques, de la physique et de la chimie, algorithmique, initiation à la programmation. − Exploitation

IMPORTANT : Vous devez vous assurer que l’adresse courriel que vous utiliserez dans le portail soit la même pour tous vos enfants (incluant ceux du primaire) afin d’éviter

Si vous ou votre enfant ne pouvez pas vous présenter à la soirée prévue pour l’accueil ou si votre enfant ne fréquentera pas l’école secondaire Thérèse-Martin pour