• Aucun résultat trouvé

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

N/A
N/A
Protected

Academic year: 2022

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

Copied!
1
0
0

Texte intégral

(1)

IFT1170 A-B-C-D-L-M

Java et ses applications Énoncé du TP #3

40 points Session d'hiver 2005

Chargés de cours : L.V. Nguyen, Y. Kadri et M. Reid Modalités :

À remettre, au plus tard, 24 avril 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/~dift1170

 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/cours/horaire/documents/labos_cour.pdf

 Faites appel à vos démonstrateurs, en écrivant à leur adresse de courriel :

dift1170@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.

Consultez la référence du langage Java offerte par Sun:

(2)

http://java.sun.com/j2se/1.4.2/docs/api/index.html

(3)

Numéro 1 (10 points)

Héritage simple

Puisqu'on dispose de la classe Dictionnaire réalisée au numéro 2 du travail pratique no.2, pourquoi ne pas venir en aide aux joueurs de mots croisés ?

Il arrive souvent, dans ce jeu, qu'on ait trouvé certaines lettres d'un mot, mais qu'on n'arrive pas à le trouver malgré tout. Un programme peut facilement nous dresser la liste des mots possibles pour une combinaison de lettres donnée, simplifiant grandement la tâche du cruciverbiste ! On aura besoin d'ajouter une fonctionnalité particulière à notre dictionnaire.

Consignes

1. Réalisez la classe Cruciverbiste, qui dérive de la classe Dictionnaire, et qui contient:

a. Un tableau pouvant contenir 24 vecteurs de mots. (Voir le point b.)

b. Un constructeur, qui reçoit le nom du fichier contenant les mots. Il devra séparer les mots du dictionnaire selon leur longueur, en les plaçant dans des vecteurs différents du tableau de vecteurs. Un vecteur pour chaque longueur de mot (2 à 25 lettres par mot) contenant tous les mots de cette longueur (d'où le tableau des 24 vecteurs du point a.)

c. La redéfinition de la méthode void chercher(String) qui reçoit un pattern. Le pattern est composé de lettres (pour les lettres trouvées) et d'astérisques (*) (pour les lettres non trouvées -- substituant n'importe quelle lettre).

La méthode cherche parmi les mots de la même longueur que le pattern pour tous les mots possibles, étant donné les lettres fournies.

Par exemple, le pattern MA**N affiche les cinq mots suivants: MACON, MALIN, MAMAN, MARIN, MATIN.

2. Réalisez une classe contenant la méthode main():

a. À l'aide d'un Cruciverbiste et de sa méthode chercher(String), permettez à l'usager de faire la recherche de mots avec des patterns, tant qu'il le souhaite.

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 fonctionnelle de la classe Dictionnaire vous sera bientôt fournie, si vous en avez besoin (dès que la remise du travail pratique no.2 sera terminée !)

Critères de correction

Héritage (super) 2 points

Redéfinition de la méthode chercher(String) 5 points

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

(4)

Numéro 2 (10 points)

Classes abstraites

Les données informatiques peuvent être stockées sur plusieurs supports. Par exemple, il y a les disquettes, les CDs, les DVDs, les disques durs, etc., tous avec leurs caractéristiques propres.

Toutefois, les différents supports ont des points en commun: ils ont une capacité, un espace utilisé, etc.

Vous disposez de la classe abstraite Support (fichier Support.java), qui contient, comme son nom l'indique, les aspects communs aux divers supports. Observez ses membres pour bien comprendre ses fonctionnalités:

 La méthode abstraite int capacite() exige des sous-classes qu'elles fournissent la quantité de données que le support va pouvoir conserver.

 La méthode boolean sauvegarder(int taille) permet d'ajouter des données sur le support, tant qu'il reste de la place. La méthode retourne une valeur booléenne qui indique si les données ont bien été enregistrées.

 La redéfinition de la méthode toString() affiche l'espace disponible sur le support.

Maintenant qu'on a une classe qui regroupe les caractéristiques communes aux différents supports, il reste à réaliser des classes concrètes qui héritent de ces caractéristiques. La classe

DVDR (fichier DVDR.java) en est un exemple dont vous pouvez vous inspirer pour réaliser les autres.

Consignes

Réalisez les deux sous-classes suivantes:

1. La classe DisqueDur, qui possède:

 Trois entiers pour le nombre de secteurs par piste, le nombre de plateaux et le nombre de cylindres, utilisés pour calculer la capacité du disque.

 Un constructeur approprié (qui reçoit trois entiers).

 La méthode int capacite() héritée de la classe Support. La capacité du disque dur, en méga octets, sera calculée comme ceci:

nombre de secteurs par piste * nombre de plateaux * nombre de cylindres / 1024

 La redéfinition de la méthode toString() pour afficher les informations du disque dur.

2. La classe CDRW, qui possède:

 Un entier pour le nombre de minutes.

 Un constructeur approprié (qui reçoit un entier).

 La méthode int capacite() héritée de la classe Support. La capacité du CD-RW sera calculée de telle sorte que chaque minute correspond à 8,75 méga octets.

 La redéfinition de la méthode toString() pour afficher les informations du CD-RW.

(5)

 La redéfinition de la méthode boolean sauvegarder(int taille) de la classe Support: si la taille des données à sauvegarder est inférieure à la capacité du disque, mais qu'il ne reste pas suffisamment d'espace, on efface d'abord le disque (en remettant tout simplement à zéro l'espace utilisé), puis on sauvegarde.

Utilisez la classe Sauvegarde (fichier Sauvegarde.java) pour tester votre code.

Critères de correction

Classe DisqueDur 3 points

Classe CDRW 4 points

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

Numéro 3 (12 points)

LinkedList, Comparable

Vous disposez du fichier Inscriptions.java, du fichier Cours.java et du fichier texte des données etudiants.txt. Le programme permet de lire le fichier texte, de séparer les champs contenus sur chaque rangée du fichier, et d'afficher de façon convenable les données. Servez- vous librement de ce code comme base pour le travail à réaliser.

Le fichier texte de données contient les informations de plusieurs étudiants. Chaque étudiant peut être inscrit à plusieurs cours, à différentes sessions, etc. On va donc bâtir une petite structure pour pouvoir effectuer des recherches avec ces données.

Consignes

1. Réalisez la classe Etudiant pouvant contenir les informations pour un étudiant:

 son code permanent, son nom, le programme dans lequel il est inscrit

 une liste des cours auxquels il est (ou a été) inscrit (LinkedList)

Prévoyez des fonctions d'accès aux informations de l'étudiant, mais ne donnez pas d'accès direct à la liste ! À la place, voici les méthodes que vous pourriez réaliser:

public void ajouterCours(String session, String sigle, String type, String section)

Cette fonction reçoit les informations d'un cours, afin de l'ajouter à la liste des cours de l'étudiant (puisque bien sur, le constructeur de l'étudiant ne reçoit pas de cours -- la liste est créée vide au début). Attention: les cours doivent rester triés dans l'ordre chronologique.

public int nbInscriptions(String session) et

public int nbInscriptions()

Ces fonctions retournent le nombre total de cours auxquels l'étudiant est inscrit.

La variante qui reçoit le paramètre session retourne seulement le nombre de cours auxquels l'étudiant était inscrit pour cette session là.

(6)

public String sessionCours(String sigle)

Cette fonction retourne à quelle session l'étudiant était inscrit au cours dont le sigle est reçu en paramètre. Si l'étudiant n'a jamais été inscrit à ce cours, la fonction retourne une chaîne vide.

Prévoyez également l'implémentation de l'interface Comparable (pour la comparaison entre deux étudiants, selon le code permanent), la redéfinition de la méthode

equals(Object) (pour l'égalité entre deux étudiants, selon le code permanent) et la redéfinition de la méthode toString() (pour l'affichage).

2. Modifiez la fonction lireEtudiants afin qu'elle bâtisse la structure souhaitée (remplir la LinkedList d'objets Etudiant qui contiennent, entre autres, les cours auxquels est (ou a été) inscrit l'étudiant). Une fois la liste remplie, ordonnez les étudiants selon leur code permanent.

Enfin, modifiez la classe Inscriptions pour effectuer les opérations suivantes:

3. Affichez les informations des étudiants:

a. du programme 117577 (Programmation Internet) qui étaient inscrits au cours IFT1149 à la session 20044 (automne 2004).

b. du programme 117571 (Module Initiation à la programmation) qui étaient inscrits au cours IFT1170 à la session 20044 (automne 2004)

4. Déterminez et affichez le nombre maximum de cours, à la session automne 2004:

a. auxquels un étudiant du programme Programmation Internet s'était inscrit.

b. auxquels un étudiant du programme 117572 (Module en programmation) s'était inscrit.

5. Recherchez et affichez l'étudiant ayant le code permanent:

a. DEPG12027201 b. KAMA16015404 c. DESE03076104 Critères de correction

Classe Etudiant 3 points

Modification de la fonction lireEtudiants 3 points

Autres fonctions à réaliser 4 points

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

Numéro 4 (8 points)

Choix: Applet ou fichiers binaires Choix A: Fichiers binaires

Vous disposez de la classe Pays (fichier Pays.java) qui peut contenir/afficher les informations d'un pays. Vous disposez également de la classe compilée FichierTexte (fichier

(7)

FichierTexte.class) qui possède une méthode static capable de lire le fichier texte des pays (pays_jo.txt) et de retourner un Vector rempli d'objets Pays. Utilisez cette classe compilée comme ceci:

Vector pays = FichierTexte.lirePays("pays_jo.txt");

Consignes

Créez une classe contenant la méthode main qui va écrire dans un fichier binaire l'ensemble des pays du vecteur des pays lus avec la méthode lirePays de la classe FichierTexte. Elle va ensuite relire les pays de ce fichier binaire pour remplir un nouveau vecteur, puis afficher les cinq (5) premiers pays de ce vecteur. (Notez que la longueur maximale des noms des pays est de 35 caractères, et de 20 caractères pour les capitales.)

Vous devez n'ajouter à la classe Pays que la méthode suivante:

public void ecrireBinaire(DataOutputStream s) throws IOException

Critères de correction

Écriture et relecture du fichier binaire 5 points

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

Choix B: Applet

À l'aide de cercles et de rectangles, il est assez facile de reproduire le logo de l'Université de Montréal. Il suffit de dessiner des cercles et des rectangles colorés, puis de dessiner des cercles et des rectangles blancs, plus petits, à l'intérieur. Utilisez la couleur bleue officielle du logo de l'Université de Montréal:

Rouge: 0 Vert: 70 Bleu: 183 (Pantone 293)

Les proportions devraient, même si elles ne sont pas exactes, êtres raisonnablement correctes, et le logo et le texte centrés dans l'applet. Voici un exemple de ce que pourrait avoir l'air votre applet:

(8)

Critères de correction

Applet, justesse du rendu 5 points

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

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 ift1170 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 ift1170 tp3

La liste des fichiers remis sera alors affichée. Si tout s’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 occupe 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 IFT1170

Références

Documents relatifs

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

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

Quinte flush (straight flush): quinte dont toutes les cartes sont de la même série, mais dont la carte la plus forte est inférieure à l'as.. Par exemple: K♥-Q♥-J♥-10♥-9♥ est

Numéro 1 (20 points) Tableaux d'objets, StringTokenizer, tri par sélection, toString() Vous disposez de deux fichiers de données en format texte ( .txt ) contenant les informations

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

encore mieux cette "inflation" du contraste sanguin sinusoïdal périphérique qui parait correspondre à une stase provoquée par l'hypertrophie des secteurs bien

Objectif d’intégration : Produire, dans le cadre d’une histoire, des énoncés significatifs en mobilisant les structures et le lexique introduits au cours du module 13 et des