• Aucun résultat trouvé

À remettre, au plus tard, 12 juillet 2005 à 22h30, avant la fermeture des laboratoires.

N/A
N/A
Protected

Academic year: 2022

Partager "À remettre, au plus tard, 12 juillet 2005 à 22h30, avant la fermeture des laboratoires."

Copied!
1
0
0

Texte intégral

(1)

IFT1166 A-B-L-M

POO avec C++ Énoncé du TP #3

40 points Session d'été 2005

Chargés de cours : Le Van Nguyen Modalités :

À remettre, au plus tard, 12 juillet 2005 à 22h30, avant la fermeture des laboratoires.

(Les laboratoires seront fermés pour la session à compter de cette date, il n'y aura donc pas de retard possible.)

Le travail est corrigé sur

40 points

(40 % 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).

Pour recevoir votre travail après la correction, remettez-le dans une enveloppe pré-affranchie et pré-adressée.

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 (au S-118, sur le mur entre X-115 et X-117, près de la porte 2196 du pavillon André-Aisenstadt).

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.

(2)

Numéro 1 (10 points)

Récursivité, tri rapide, recherche dichotomique

Vous disposez du fichier pays.cpp, contenant entre autres l'ébauche d'une classe contenant les informations d'un pays et une fonction pour lire et remplir un tableau d'objets Pays. Très similaire à la casse Nation que vous avez utilisé antérieurement, vous utiliserez d'ailleurs le même fichier de données qu'au travail pratique #2.

Consignes

 Réalisez tout d'abord la surcharge des opérateurs nécessaires pour effectuer des

comparaisons entres objets Pays (plus petit, plus grand ou égal, ...). (Vous verrez, selon les besoins des tâches suivantes, quels opérateurs vous devrez vraiment surcharger.)

Note: les pays sont comparés selon leur nom.

 Réalisez un patron de fonction utilisant la récursivité pour trier les pays en utilisant l'algorithme de tri rapide (QuickSort).

Triez les pays en utilisant ce patron de fonction.

 Réalisez un patron de fonction utilisant la récursivité pour effectuer la recherche d'un pays à partir de son nom en utilisant l'algorithme de recherche dichotomique.

Recherchez et affichez les informations des pays suivants:

o CANADA

o COREE DE L'EST o ETHIOPIE

Critères de correction

Surcharge des opérateurs nécessaires 1 point

Patron de tri rapide récursif 3 points

Patron de recherche dichotomique récursif 4 points

Fonctionnement, qualité, présentation, etc. 2 points

Numéro 2 (15 points)

Patron de classe list de la STL

Vous disposez du fichier texte "lorem_ipsum.txt" contenant quelques paragraphes de texte générique. En vous aidant du code contenu dans le fichier "mots.cpp", suivez les directives

(3)

Complétez la fonction analyserTexte :

La fonction doit extraire tous les mots du texte et les ajouter dans la liste reçue en paramètre. Les mots se retrouvant plus d'une fois ne seront pas ajoutés plus d'une fois dans la liste, mais se verront augmenter leur occurrence (appel à la méthode inc() sur l'objet). Vous ignorez évidemment les différences de capitalisation (majuscules) des mots.

Ainsi, à la fin de la lecture du fichier, la liste contiendra un certain nombre d'objets Mot, pour des mots tous différents, avec le nombre de fois que chacun d'entre eux se

retrouvaient dans le texte (ex.: RISUS se retrouve 5 fois dans le texte).

Pour se faire, vous devez:

o Identifier les mots.

Dans la boucle de lecture, chaque nouvelle lettre s'ajoute à la précédente pour former un mot dans une chaîne de caractères temporaire. Lorsqu'on lit un caractère qui n'est pas une lettre, c'est la fin d'un mot, on peut donc travailler avec ce mot, puis vider la chaîne temporaire pour commencer un nouveau mot.

o Les rechercher dans la liste pour savoir s'ils s'y trouvent déjà.

o Incrémenter leur occurrence s'ils s'y trouvent.

o Les ajouter à la liste s'ils ne s'y trouvent pas.

Triez la liste en ordre alphabétique. (Voir la méthode sort() de la classe list.)

 Enfin, effectuez les tâches suivantes:

o Supprimez de la liste tous les mots se retrouvant moins de 5 fois dans le texte.

o Incrémentez de 1 l'occurrence de tous les mots débutant par la lettre N.

o Décrémentez de 2 l'occurrence de tous les mots débutant par la lettre E.

o Affichez ensuite tous les mots dont le nombre de lettres correspond au nombre d'occurrences.

Critères de correction

Construction de la liste (mots distincts, bon nombre d'occurrences) 6 points

Suppression de mots 3 points

Modification de mots 2 points

Autres tâches 2 points

Fonctionnement, qualité, présentation, etc. 2 points

(4)

Numéro 3 (8 points)

Héritage simple

Voici la hiérarchie simple des classes pour des vendeurs que vous allez réaliser:

Vendeur

Réalisez la classe Vendeur, abstraite, contenant:

 Le numéro d'assurance sociale (NAS), une chaîne de 11 caractères (ex.: 123 456 789).

 Le sexe du vendeur (F ou M).

 Un constructeur approprié.

 Une méthode publique abstraite (virtuelle pure) calculant et retournant le salaire hebdomadaire. Cette méthode sera concrétisée dans les sous classes.

 La surcharge de l'opérateur d'affichage que voici:

friend ostream & operator << (ostream & out, const Vendeur & v) {

v.afficher(out);

return out;

}

 Une méthode d'affichage virtuelle protégée (protected) dont voici la signature:

virtual void afficher(ostream &) const;

Cette méthode doit afficher le NAS, le sexe, ainsi que le salaire hebdomadaire.

Réalisez la sous classe VendeurJunior, dérivant de la classe Vendeur, contenant:

 Un champ privé pour le montant des ventes.

 Un constructeur approprié.

 La redéfinition de la méthode protégée afficher pour afficher également le montant des ventes.

 La concrétisation de la méthode de calcul du salaire hebdomadaire héritée de la classe

Vendeur, sachant que le salaire d'un vendeur junior est calculé comme suit:

Salaire de base de 400$ + 20% des ventes (en commission)

VendeurJunior VendeurSenior

(5)

 La concrétisation de la méthode de calcul du salaire hebdomadaire héritée de la classe

Vendeur, sachant que le salaire d'un vendeur senior est calculé comme suit:

Salaire de base de 800$ + 35$ par année d'ancienneté

Vous disposez du fichier de données "vendeurs.txt" contenant les informations de vendeurs:

J 123 433 234 M 1560 S 534 234 125 M 12 ...

C'est à dire, un homme vendeur junior (J) dont le NAS est "123 433 234" qui a vendu pour 1560$, et un homme vendeur senior (S) dont le NAS est "534 234 125" qui a 12 années d'ancienneté.

Lisez le fichier et remplissez un vecteur (classe vector) de pointeurs sur des objets Vendeur

(c'est à dire un vector<Vendeur*>, dont les éléments pointent sur des VendeurJunior ou

VendeurSenior).

1. Affichez les éléments du vecteur à l'aide d'un petit patron de fonction une fois le vecteur rempli. Réalisez si vous voulez la fonction suivante:

ostream & operator << (ostream & out, const Vendeur * v);

2. Triez les vendeurs du vecteur en ordre croissant de leur salaire hebdomadaire.

3. Affichez le vendeur le moins bien payé et le vendeur le mieux payé du vecteur (qui devraient ici correspondre au premier et au dernier élément du vecteur).

Critères de correction

Classe abstraite Vendeur 2 points

Sous classes VendeurJunior et VendeurSenior 2 points

Lecture du fichier, création du vecteur de Vendeur*, autres tâches 3 points

Fonctionnement, qualité, présentation, etc. 1 point

Dernier numéro (fichiers binaires) à venir...

(6)

Remise électronique du TP3:

 Allez dans votre dossier Documents personnels (disque réseau R) situé sur le bureau et créer le dossier remise-tp3 (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 « Raccoursis 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 tp3 remise-tp3/*

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 tp3

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.

Bon travail ! -- L'équipe du IFT1166

Références

Documents relatifs

N'est- il pas nécessaire et judicieux que soit menée une construction de nouveaux indicateurs et/ou l'amélioration de ceux utilisés en vue d'une plus grande souplesse à même de

 Le gouvernement de la Nouvelle-Calédonie a arrêté un projet de délibération qui propose l’adhésion de la Nouvelle-Calédonie à l’Union internationale pour

A la lumière de ces 2 appels, nous avons constaté un manque de vision stratégique et des objectifs pour cibler 1] les structures pouvant conduire à un renouveau de

[r]

Notez: vous utilisez la classe que vous avez réalisé au travail pratique no.2 comme classe de base, mais un fichier Dictionnaire.java contenant une version parfaitement

Ce premier numéro vous donne l'occasion de vous familiariser avec le C#, un langage de programmation orientée (tout) objet. Réalisez un programme en C# permettant de :.. 1) saisir

3. de compter, de transmettre des résultats via pointeurs puis les afficher : a) le nombre d’étudiants de la section ‘A‘ dont le final dépasse 80.0 le nombre d’étudiants

minist&amp;res de la planification ou, le cas echeant, par les ministers de la cooperation technique. Lorsqu'il existe une coordination appropriee entre les divers