IFT1166 A+B et L+M
POO avec C++ Énoncé du TP #2
35 points Session d'été 2005
Chargé de cours : Le Van Nguyen
Do you have advice for beginning computer science student?
- Keep things simple. Find real problems and solve them in the
simplest possible way.
Most of all, have fun with everything you do and make sure
everyone around you is having fun!
Radia Perlman
Sun Microsystem (U.S.A.)
Modalités :
À remettre, au plus tard, dimanche le 19 juin, avant la fermeture des laboratoires.
(Chaque jour de retard entraîne une pénalité de 10 points.)
Toutes les matières du TP2 sont demandées à l’intra => essayez de faire le TP2 avant l’intra malgré que la remise du TP2 aura lieu après l’intra.
Le travail est corrigé sur
35 points
(35 % des travaux pratiques).Les travaux se font seul ou en équipe de deux, au maximum.
(Vous ne remettez alors qu'un seul travail.) Remise des travaux :
Vous devez remettre vos travaux sur papier, ainsi que de façon électronique.
(Cette procédure vous sera expliquée par vos démonstrateurs.)
Pour la remise papier, imprimez vos codes sources, ainsi que les résultats de l'exécution de vos programmes (placés en commentaire à la suite de vos programmes), et attachez-les à une page de remise de travaux (disponible sur le site du cours).
Remettez ensuite vos travaux à vos démonstrateurs, à la réceptionniste du campus Longueuil, ou dans une des boîtes de remise à l'Université de Montréal.
N'oubliez pas de bien identifier vos travaux, tant sur papier que dans votre programme.
Indiquez votre nom et nom d'usager dans l'entête dans chacun de vos programmes.
Si vous travaillez en équipe, pensez à indiquer les coordonnées des deux coéquipiers ! Dépannage :
Consultez le site du cours régulièrement, il contient de nombreuses informations, mises à jour régulièrement, concernant les travaux et la matière du cours :
http://www.iro.umontreal.ca/~dift1166
Profitez des périodes de travaux pratiques (démonstration), des périodes de pratique libre (P. L.) et des séances de révision (solution des devoirs, solution de quelques anciennes
questions d’examens). Des auxiliaires pourront vous venir en aide dans la réalisation de vos travaux. Pour l’horaire, veuillez consulter le site Web de la DESI :
http://www.desi.umontreal.ca/
Faites appel à vos démonstrateurs, en écrivant à leur adresse de courriel :
dift1166@iro.umontreal.ca
(Indiquez le sigle et la section cours, ainsi que le numéro du travail dans le sujet de votre message.)
Consultez la FAQ (questions fréquemment posées) sur le site du cours.
Numéro 1 (10 points : encapsulation, string, tableau d’objets)
(Les matières du numéro 1 sont présentées durant la semaine du 16 mai. Certaines fonctions membres sont expliquées en classe)
Réalisez un programme en C++ qui comporte la classe incomplète suivante :
class Etudiant {
private:
string codePerm; // exemple "TREJ15028009"
int nbCafe; // nombre de tasses de café consommées par jour public:
// constructeurs, méthodes à écrire char getSexe()const { return . . . } int getAge() const
{
return 105 - atoi(codePerm.substr(8, 2).c_str());
} . . . };
Complétez la classe, en réalisant des constructeurs et autres fonctions membres appropriées afin de satisfaire aux exigences suivantes :
1. Dans la première démonstration (fonction demo1()) du fonctionnement de cette classe, on instancie (construit) deux objets de la classe Etudiant :
etud1 : avec code permanent "TREJ15028009" est né le 15 février 1980. Il consomme 3 tasses de café par jour.
etud2 : avec code permanent "CHAN27568503" est née le 27 juin 1985. Elle consomme 1 tasse de café par jour (valeur par défaut).
On affiche les informations de ces deux étudiants comme suit :
Informations de TREJ15028009
- sexe : masculin - age a 2005 : 25 an(s)
- cafe consomme : 3 tasse(s) par jour
Informations de CHAN27568503
- sexe : feminin - age a 2005 : 20 an(s)
- cafe consomme : 1 tasse(s) par jour
Déterminez et affichez les informations de l’étudiant qui consomme plus de café entre
etud1 et etud2.
Cette première démonstration permet aussi d’afficher la consommation de café originale de l’objet etud1, de réduire cette consommation à trois tasses de moins et de réafficher la consommation après la réduction.
Réaffichez les informations de l’étudiant qui consomme plus de café entre etud1 et
etud2.
2. Dans la deuxième démonstration (fonction demo2()) du fonctionnement de cette classe, on déclare et initialise un tableau de 5 étudiants, par exemple :
Etudiant etud[] = {
Etudiant("TREJ15028009", 2), Etudiant("CHAN27568503"), Etudiant("ARCP02067001", 5), Etudiant("LAFJ31628104", 0), Etudiant("TREM01128607") };
int nbEtud = sizeof(etud) / sizeof(Etudiant);
a) affichez le contenu de ce tableau.
b) supprimez le deuxième et le troisième étudiant puis affichez le contenu du tableau.
c) déterminez et affichez les informations de l’étudiant le plus âgé dans le tableau restant.
Critères de correction
Classe Etudiant, pointeur this, méthodes get, set, ... 3 points
Bon fonctionnement 4 points
Présentation, qualité, etc. 3 points
Numéro 2 (10 points : surcharge des opérateurs, tableau dynamique d’objets)
(Une partie des matières du numéro 2 sont présentées durant la semaine du 16 mai.
Le reste seront présentées dans la semaine du 23 mai)
En classe, on a expliqué l’exemple tab_dyna.cpp pour un tableau dynamique des structures;
chaque élément de ce tableau est une structure de type Nation.
Adaptez l’exemple pour un tableau dynamique de pays. Chaque élément sera un objet d'une classe Nation. Le programme permettra :
de surcharger l’opérateur < pour trier ce tableau des pays selon leur population.
On exige, par ailleurs, un patron du tri par sélection.
de surcharger l’opérateur d’affichage <<
On affiche les 5 premiers pays d’Asie avant le tri, puis les 10 premiers pays d’Amérique après le tri, en utilisant, entre autres, cette surcharge de l’opérateur d’affichage.
de déterminer et d’afficher :
a) la liste des pays dont le nom du pays est le même que le nom de la capitale (exemple : Panama, etc.)
b) le pays le plus peuplé d’Afrique.
c) le pays le plus grand en superficie d’Europe.
Critères de correction :
Classe Nation, pointeur this, surcharge des opérateurs, etc. 3 points
Tableau dynamique des pays, fonctionnement 4 points
Présentation, qualité, etc. 3 points
Numéro 3 (15 points : liste linéaire des pays)
(La notion de liste linéaire chaînée sera présentée dans la semaine du 23 mai avec l’exemple ListePers.cpp dont 30 points de l’intra seront reliées à cet exemple).
Réalisez un programme en C++ qui permet de lire le fichier des pays participant aux Jeux Olympiques d’Athènes en 2004 (pays_jo.e05) afin de créer la liste linéaire chaînée des pays d’Europe.
On ajoute ensuite le pays suivant au début de la liste :
Nom : LUXEMBOURG
Capitale : LUXEMBOURG
Superficie : 2586 km2
Population : 442972 habitants On détermine et affiche les informations :
1. du pays d’Europe ayant le moins d’habitants.
2. du pays d’Europe le plus petit en superficie.
3. du pays d’Europe dont le nom du pays contient plus de lettres que le nom des autres pays (France contient 6 lettres, Allemagne en contient 9, etc.)
Le programme lit un deuxième fichier athenes.txt dont chaque ligne contient le nom d’un pays participant, suivi du nombre de médailles d’or, d’argent et de bronze remportées. Exemple :
ETATS-UNIS 35 39 29 CHINE 32 17 14 RUSSIE 27 27 38
Pour chaque nom de pays lu, on cherche dans la liste linéaire ce pays, puis on affiche toutes les informations du pays trouvé, ainsi que le nombre de médailles d’or, d’argent et de bronze remportées.
Critères de correction
Liste linéaire chaînée des pays, bon fonctionnement 10 points
Présentation, qualité, etc. 5 points
Remise électronique du TP2:
Allez dans votre dossier Documents personnels (disque réseau R) situé sur le bureau et créer le dossier remise-tp2 (faites bien attention de ne pas mettre de majuscules ou d’espaces blancs dans le nom du dossier).
Déposez vos programmes dans ce nouveau dossier. Vérifiez que les noms de vos fichiers ne contiennent ni accents, ni espaces blancs, ni caractères spéciaux (autrement dit, les noms ne contiennent que des lettres et/ou des chiffres).
Double-cliquez sur l’icône Branchement sur UNIX situé dans le dossier « Raccourcis DESI »sur le bureau. Branchez-vous sur Unix; c’est-à-dire entrez votre nom d’usager et votre mot de passe Unix. À l’incitation, tapez la commande:
remise ift1166 tp2 remise-tp2/*
Faites bien attention de respecter les majuscules et les minuscules !
À tout moment, vous pouvez vérifier quels fichiers vous avez remis en tapant la commande:
remise -v ift1166 tp2
La liste des fichiers remis sera alors affichée. Si tout c’est bien passé, tapez "exit", puis fermez la fenêtre de Telnet. La remise électronique prend note du jour de la remise; les T.P. peuvent donc être remis en retard (avec pénalité).
Vous pouvez faire une remise électronique autant de fois que vous le voulez, mais respectez la règle suivante: remettez toujours votre T.P. du même compte. Chaque nouveau fichier remis écrase le fichier du même nom remis auparavant; seule la dernière version sera alors conservée et corrigée.
La correction des travaux :
Suite à une recommandation de la direction de la DESI et du DIRO, la qualité de l'algorithme et de la programmation occupent une place importante dans l'évaluation d'un travail. Un programme qui fonctionne est bien mais insuffisant pour mériter une meilleure note!
Veuillez consulter les critères de correction de chacun des numéros d'un travail.