et Programmation Objet

Transcription

et Programmation Objet
UMONS -
Faculté Polytechnique
Service d’Informatique
www.ig.fpms.ac.be
Rue de Houdain, 9
B- 7000 Mons
www.umons.ac.be
et Programmation Objet
Travaux Pratiques d’Informatique II
2ème Bachelier
par
Mohammed BENJELLOUN
Avec la participation de :
Sa. Mahmoudi
F. Lecron
A. Guttadauria
Année académique 2010-2011
Table des matières
Consignes
..............................................
3
TP 1 Manipulation d’un tableau de structures et de classes . . . . .
4
TP 2 Constructeurs, destructeurs et opérateurs. . . . . . . . . . . . . . .
5
TP 3 Vector et List et algorithmes de la librairie STL. . . . . . . . . . .
6
TP 4 L'héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
Exemples d’examens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
Travaux Pratiques d’Informatique II
Mohammed Benjelloun
Umons FPMs : Service d’Informatique 2010-11
1
Consignes
Si malgré la préparation de chaque TP, vous n’avez pas terminé à la fin de la séance,
vous devrez le continuer seul et poser vos éventuelles questions avant le TP suivant.
Vous pouvez venir nous les poser directement ou les poser via le forum. Cette
remarque est valable pour tous les travaux pratiques de ce cours.
Pour rappel, les travaux pratiques sont obligatoires.
Nos Emails :
[email protected]
[email protected]
[email protected]
[email protected]
Travaux Pratiques d’Informatique II
Mohammed Benjelloun
Umons FPMs : Service d’Informatique 2010-11
2
TP1
But : Manipulation d’un tableau de structures contenant des fonctions membres.
Manipulation d’un tableau de classes contenant des fonctions membres.
Ecrire un programme qui gère un ensemble d’Etudiants et de Profs (Nmax=10). Si
chaque étudiant a une structure de type struct Etudiant, chaque Prof est un objet
de la classe PROF. Les déclarations de la structure et de la classe sont:
struct Etudiant {
int Id;
string nom;
void saisie();
void affiche();
};
class PROF {
int Id;
string nom;
public : void saisie();
void affiche();
};
I) Ce programme doit d’abord gérer les Etudiants en utilisant en boucle le menu suivant :
1 : Ajouter au (début ou fin) et Affichage de tous les Etudiants
2 : Supprimer le début et Affichage du tableau
3 : Chercher un Etudiant selon son Id
4 : Tri selon NOM et Affichage du tableau
II) Ensuite gérer les Profs en utilisant en boucle le menu suivant :
1 : Ajouter au (début ou milieu) et Affichage du T_P
2 : Supprimer le début et Affichage du tableau
3 : Chercher un Prof selon son Id
4 : Tri selon NOM et Affichage du tableau
Afin de vous aider à démarrer votre programme, nous vous proposons le code source
TP1_2bac.cpp sur Moodle. Ce code est une base contenant l’implémentation de
quelques fonctions, que vous devez compléter.
S’il vous reste du temps:
•
•
•
Chercher un Etudiant ou un Prof selon son Id et son nom.
Créer Dynamiquement 1 Prof et Chercher s’il existe dans T_P.
Que deviendra le programme si le tableau T_P est défini dynamiquement?
Comment résoudre dans ce cas le point 1 (Prof): Ajouter … ?
Travaux Pratiques d’Informatique II
Mohammed Benjelloun
Umons FPMs : Service d’Informatique 2010-11
3
TP2
But : Manipulation d’un tableau de classes.
Se familiariser avec l‘utilisation de constructeurs, destructeurs, la
définition d’opérateurs, variable statique, …
Ecrire un programme qui gère un ensemble d’enseignants. Nous utiliserons une
classe PROF dont les objets sont des enseignants caractérisés par les
membres privés:
int Id;
string nom, Service;
Dans cette classe on déclarera au moins :
• deux méthodes, l’une pour saisir et l’autre pour afficher chaque objet de la classe
(Saisie() et Affichage() ).
• un constructeur permettant l’incrémentation automatique de l’Id (Prof1 : Id=1,
Prof2 : Id=2, …).
• un destructeur montrant la disparition d'instances d’objets,
• la définition d’un opérateur == afin de comparer deux Profs.
La comparaison s’effectuera selon le nom et le service.
Si nécessaire, des fonctions membres peuvent être ajoutées à cette classe.
Le programme doit gérer en boucle le menu suivant :
1 : Saisie et Affichage d’un Tableau de Profs T_P
2 : Ajouter au milieu et Affichage du T_P
3 : Supprimer le début et Affichage du tableau
4 : Créer Dynamiquement 1 Prof et Chercher s’il existe dans T_P
5 : Tri selon Id et Affichage du tableau
6 : Quitter
S’il vous reste du temps:
Définir une classe Etudiant dont les objets sont des étudiants caractérisés par
int Id;
string nom;
1’ : Saisie et Affichage d’un Tableau d’Etudiant T_E
2’ : Ajouter au milieu et Affichage du T_E
Optimisez votre code afin de permettre la réutilisation des fonctions déjà
implémentées (moyennant adaptation).
Et si vous avez encore du temps :
Que deviendra le programme si les tableaux sont remplacés respectivement
par les conteneurs Vector et List.
Travaux Pratiques d’Informatique II
Mohammed Benjelloun
Umons FPMs : Service d’Informatique 2010-11
4
TP3
But : Manipulation des conteneurs Vector et List et algorithmes de la librairie STL.
Optimisation et création de code générique.
Déclarer deux classes :
Une classe Etudiant dont les objets sont des étudiants caractérisés par
int Id;
string nom;
Une seconde classe PROF dont les objets sont des enseignants caractérisés par
int Id;
string nom, Service;
Dans les deux classes (étudiants, enseignants), on déclarera au moins deux
méthodes, l’une pour saisir et l’autre pour afficher chaque objet de la classe
(Saisie() et affichage()).
La manipulation des étudiants se fera en utilisant un conteneur List alors que les
Profs seront rangés dans un conteneur Vector.
Il faut d’abord choisir (0) entre Etudiants et Profs. S’il s’agit d’Etudiants on
utilisera une List et s’il s’agit de Profs on utilisera Vector.
Ce programme doit gérer en boucle le menu suivant :
0 : Choix entre Etudiants ou Profs
1 : Saisie et Affichage d’une List (Etud.) ou Vector (Profs)
2 : Ajouter au (début ou fin) et Affichage de l’ensemble
3 : Créer Dynamiquement 1 Element (Etud ou Prof) et Chercher s’il existe
4 : Tri selon NOM et Affichage de l’ensemble
5 : Tri selon Id et Affichage de l’ensemble
6 : Quitter
Les choix seront traités via l’instruction case. Votre programme utilisera une série de fonctions
permettant de séparer les tâches.
Si nécessaire, des fonctions membres peuvent être ajoutées aux classes. On y prévoira au moins:
• un constructeur par classe permettant l’incrémentation automatique de l’Id (Prof1 : Id=1,
Prof2 : Id=2, … et
Etud1 : Id1=1, Etud2 : Id2=2, ….).
Optimisez votre code afin de permettre la réutilisation des morceaux de code.
S’il vous reste du temps:
Que deviendra le programme si les classes Etudiant et PROF héritent d’une
classe Personne caractérisée par : int Id et string nom.
Travaux Pratiques d’Informatique II
Mohammed Benjelloun
Umons FPMs : Service d’Informatique 2010-11
5
TP4 :
Personne
int Id ;
string nom;
public :
void saisie();
void afficher();
Etudiant
Prof
int Note[3];
public :
void saisie();
void afficher()
string Service;
Implémentez la hiérarchie de
But :
Manipulation des
conteneurs Vector et List.
Utilisation de l'héritage qui
est un principe propre à la
programmation orientée
objet. Optimisation et
Réutilisation de déclarations
et de code.
public :
void saisie();
void afficher();
Direction
string Titre;
public :
void saisie();
void afficher();
..
Ensuite, implémentez un programme qui doit gérer en boucle le Menu suivant :
1.
2.
3.
4.
5.
Saisie et/ou Ajout Etudiants et affichage
Saisie et/ou Ajout Profs et affichage
Supprimer un Etudiant ou un Prof à la position P
Doyen membre de Direction Calcule la Moyenne de chaque étudiant+affichage
Chercher un Etudiant ou un Prof selon le nom
Les Etudiants sont rangés dans une List alors que les Profs sont rangés dans un Vector.
Il est possible d’ajouter des paramètres aux fonctions. Si nécessaire, d’autres fonctions
membres peuvent être ajoutées aux classes.
Optimisez votre code afin de permettre la réutilisation des morceaux de code.
S’il vous reste du temps :
Que deviendra le programme si l’on suppose que :
• Chaque étudiant peut choisir le nombre de matières ainsi que leur titre.
Tous les étudiants n’ont pas forcément les mêmes matières ni le même nombre (exp :
Etud1 : Math et Info ; Etud2 : Chimie, Info, MécaRa, Anglais).
• Un Prof ne peut enseigner qu’une seule matière (exp : Math ou Anglais, …)
Chercher tous les étudiants qui ont cours avec le Prof X.
Travaux Pratiques d’Informatique II
Mohammed Benjelloun
Umons FPMs : Service d’Informatique 2010-11
6
Et si vous avez encore du temps :
Que deviendra le programme si un Prof peut enseigner une ou plusieurs matières
(exp : Math et Anglais) et qu’il faille chercher tous les étudiants qui ont au moins un
cours avec le Prof X.
Justifiez votre choix du type pour ranger les matières.
Travaux Pratiques d’Informatique II
Mohammed Benjelloun
Umons FPMs : Service d’Informatique 2010-11
7
Exemples d’examens
Parcours Vita
Ecrire un programme permettant de manipuler plusieurs listes
dont le nombre est NL< Nmax=15. Il s’agit d’un Parcours
Vita avec NL activités et un nombre de participants
NP<Nmax. Les informations caractérisant chaque participant
dans la liste sont les suivantes: Nom : chaîne de caractères
Code : un caractère (A, B, …)
Créer la (les) structure(s) nécessaire(s) à ce problème.
Les fonctions Saisie(..) et Affichage(..) pour chaque élément
(participant) sont déclarées dans la structure participant.
Puis on transfert (NomC C) de Liste1 vers Liste2. Ce dernier
sera inséré dans Liste2 après (NomD D).
Ce programme doit gérer en boucle le menu suivant :
Liste1 : Vide
Liste2 : (NomD D) --- (NomC C) --- (NB B) ----(NA A)
1234-
Liste1 :
(NA A) --- (NB B)
Liste2 :
(NomD D) --- (NomC C)
…
Tant que liste1 n’est pas vide, on continue.
A la fin on aura l’affichage suivant :
SaisieL Liste1 et Affichage
Liste1 TO Liste2 et Affichage
Parcours et Affichage
Fin
1- Saisie Liste1 et Affichage:
Est constitué au moins de deux fonctions :
SaisieL (…….) ;
Dans cette fonction on demandera et on testera
le nombre de participants (NP) à saisir et on
effectuera la saisie des participants dans une liste par
insertion en tête.
Par exemple si NP=4 et l’utilisateur introduit au clavier :
(NomD D) puis (NomC C) puis (NB B) et enfin (NA A)
La liste est :
Attention : Ici on affiche l’état des deux listes chaque
fois qu’un participant passe de la liste1 à la liste2.
Il faut soigner tous les affichages afin de bien suivre et
comprendre les différentes séquences.
3- Parcours et Affichage:
!
Ici on demandera à l’utilisateur le nombre NL et on y fera
traverser les NP participants comme le montre la figure générale
(début).
On affiche toutes les listes chaque fois que toute l’équipe passe
d’une liste à l’autre. Si par exemple NL=3 on affichera:
Liste1 : (NA A) --- (NB B) --- (NomC C) --- (NomD D)
Liste2 : Vide
Liste3 : Vide
---------
Affichage(…….) ;
(NA A) --- (NB B) --- (NomC C) --- (NomD D)
Liste1 : Vide
Liste2 : (NomD D) --- (NomC C) --- (NB B) ----(NA A)
Liste3 : Vide
---------
2- Liste1 Liste2 et Affichage:
Liste1 : Vide
Liste2 : Vide
Ici, comme si les participants sautent, un par un, de la poutre1 Liste3 : (NA A) --- (NB B) --- (NomC C) --- (NomD D)
(Liste1) à la poutre2 (Liste2). On applique (FIFO), c'est-àdire, on retire d’abord le D de Liste1, on insère D dans Liste2 RQs :
et on affiche liste1 et liste2.
Utilisez les règles de bonnes pratiques étudiées durant les travaux
Liste1 :
(NA A) --- (NB B) --- (NomC C)
pratiques telles que l’indentation syntaxique, la programmation
modulaire, libérer la mémoire d’un élément supprimé …
Liste2 :
(NomD D)
Travaux Pratiques d’Informatique II
Mohammed Benjelloun
Umons FPMs : Service d’Informatique 2010-11
8
Le poulailler
Volaille
Implémentez la hiérarchie de classes en face : la classe de
base Volaille et ses classes dérivées : Poule, Coq,
Œuf ainsi que les différentes fonctions membres. On
considère que le poids d’un œuf = 0,1 poids de la poule.
Il est possible d’ajouter des paramètres aux fonctions
et/ou d’ajouter d’autres fonctions.
string Nom ;
public :
void saisie();
void affiche();
Poule
Ce programme doit gérer en boucle le Menu suivant :
int Poids ;
2- Créer un Tableau Dynamique de poules + Affichage
3567-
Créer un coq + Affichage
Le coq fait cocorico et toutes les poules pondent
Le coq dit CoCo et une poule/2 pond
Fin (on tue tout le poulailler !!)
public :
void saisie();
void affiche();
void pondre(??);
1- Créer Tableau Dynamique de Poules et Affichage:
Oeuf
Est constitué au moins de deux fonctions :
SaisiePoule (…….) ;
Dans cette fonction on demandera et on testera le nombre de
Poules (NP<Max=10) à saisir et on effectuera la saisie dans un
Tableau Dynamique.
Coq
string Description ;
public :
void saisie();
void affiche();
void cocorico( ??);
void CoCo( ??);
char Qualite;
public :
void saisie();
void affiche();
Voici un exemple d’exécution du programme
Menu :
*******
1. Créer un Tb Dyn poule + Af.
2. Créer un coq + Affichage
3. Le coq fait cocorico et
toutes les poules pondent
4. Le coq dit CoCo poule/2
5. Fin
Choix : 1
Combien de poules ? : 4
Le Nom ? : Poule1
Le poids ? : 200
Le Nom ? : Poule2
Le poids ? : 180
Le Nom ? : Poule3
Le poids ? : 1200
Le Nom ? : Poule4
Le poids ? : 1000
Poule4 (1000)
Poule3 (1200)
Poule2 (180)
Poule1 (200)
Menu :
*******
Choix : 2
Le Nom ? : M_CoQ
Description ? : BeauCoQ
Menu :
*******
Choix : 4
(Une poule sur 2)
L'oeuf a bien ete pondu et pese : 100(gr)
Qualite de l'oeuf (A,B ou C)? : A
Son Nom : M_CoQ
Description : BeauCoQ
L'oeuf a bien ete pondu et pese : 18(gr)
Qualite de l'oeuf (A,B ou C)? : A
Menu :
*******
Choix : 3
L'oeuf a bien ete pondu et pese : 100(gr)
Qualite de l'oeuf (A,B ou C)? : A
L'oeuf a bien ete pondu et pese : 120(gr)
Qualite de l'oeuf (A,B ou C)? : B
L'oeuf a bien ete pondu et pese : 18(gr)
Qualite de l'oeuf (A,B ou C)? : A
L'oeuf a bien ete pondu et pese : 20(gr)
Qualite de l'oeuf (A,B ou C)? : C
Travaux Pratiques d’Informatique II
Mohammed Benjelloun
Rqs : Normalement pas de Classe
amie.
Utilisez les règles de bonnes pratiques
étudiées durant les travaux pratiques
telles que l’indentation syntaxique, la
programmation modulaire, libération
de mémoire.
Umons FPMs : Service d’Informatique 2010-11
9