TP 3 de SDD et Algo

publicité
Formation : IPS
Intervenant : Vincent Ranwez
TP 3 de SDD et Algo
L’objectif de ce TP est de fusionner des fichiers en utilisant les classes HashSet et HashTable
de Java.
Chaque responsable de module envoie au responsable de formation IPS la liste des notes
obtenues dans son module. On veut pouvoir regrouper dans un même fichier les notes
obtenues par les étudiants d’IPS dans une série quelconque de modules.
Chaque responsable de module envoie ses notes dans un fichier ayant le format suivant :
CodeModule
NumEtudiant1
NumEtudiant2
NumEtudiant3
NumEtudiant4
Question 1 :
Nom1
Nom2
Nom3
Nom4
Prénom1
Prénom2
Prénom3
Prénom4
Note1
Note2
Note3
Note4
HashSet et HashTable
Q.1.a :
Consultez la documentation de la classe HashSet. Cette classe implémente plusieurs
interfaces ; consultez leurs documentations. Regardez plus particulièrement la documentation
de l’interface Collection et Set.
Q.1.b :
Consultez la documentation de la classe HashTable. Quel est l’équivalent de cette classe en
python ?
Q.1.c :
Vous trouverez des exemples d’utilisation de ces classes sur le site "Java Developers
Almanac". Regardez notamment l’exemple de création d’un HashSet. Dans cet exemple la
création se fait à l’aide de l’instruction :
Set set = new HashSet();
On aurait pu utilisez HashSet set = new HashSet(); mais ce serait moins pertinent. Vous
pouvez lire à ce sujet l’article disponible sur le site de SUN :
http://java.sun.com/developer/technicalArticles/Collections/Using/ (section Programming
Tips and API Design).
Question 2 :
Construire une liste d’étudiants
Q.2.a :
Ecrivez un programme qui prend en paramètre la liste des fichiers contenant les notes des
différents modules que vous voulez traiter et affiche en sortie la liste des noms d’étudiants
ayants suivit au moins l’un de ces modules. Pour cela vous utiliserez la classe HashSet.
Utilisez le site "Java Developers Almanac" pour trouver un exemple de lecture de fichier texte
puis utilisez la méthode split() de la classe String pour récupérer les différents champs
présents sur chaque ligne de vos fichiers.
Q.2.b :
Copiez votre HashSet dans un Vector en utilisant le constructeur approprié. Utilisez la
méthode statique "sort()" de Collections pour triez ce vecteur et affichez les élèves dans
l’ordre alphabétique. Pourquoi pouvez-vous utiliser la méthode sort ayant pour signature :
static void sort(List list)
Université Montpellier II Place Eugène Bataillon
34095 Montpellier Cedex5, France
Formation : IPS
Intervenant : Vincent Ranwez
avec un Vector en paramètre ? Pouvait-on directement utiliser un objet de type Set ?
Q.2.c :
On peut directement gérer un ensemble trié à partir de SortedSet, modifiez votre programme
pour utiliser cette solution au lieu de passer par le tri d’un Vector (Attention SortedSet n’est
qu’une interface).
Question 3 :
Fusionner les notes
On veut obtenir un fichier de synthèse des notes obtenues à une série de modules en indiquant
les modules non choisit (NC) pour chaque étudiant. Le fichier présentera les étudiants dans
l’ordre alphabétique et les modules dans l’ordre ou ils sont passés en paramètres. Ce fichier de
synthèse sera de la forme :
Nom1
Nom2
Nom3
Module1
NC
11
14
Module2
14
NC
11
Pour cela vous écrirez une classe Module qui possède comme attributs un nom de module et
une hashTable dont la clef est le nom de l’étudiant et la valeur est la note obtenue par cet
étudiant à ce module. Cette classe possède un constructeur qui prend en paramètre un nom de
fichier.
Vous créerez ensuite un Vecteur de Module correspondant aux fichiers que vous passez en
paramètre à votre programme. En utilisant l’ensemble trié d’étudiants (Q2) et ce Vecteur de
Modules vous pouvez maintenant construire le fichier de synthèse désiré.
Question 4 : Pour aller plus loin (facultatif)
Q.4.a :
Ajoutez le calcul de la moyenne par étudiants et par module.
Ajoutez une pondération aux modules (indiquée par exemple après le code module) et
calculez les moyennes pondérées.
Ajoutez un fichier AllEtudiants.txt qui contient l’ensemble des étudiants de la formation et
qui permet de vérifier qu’il n’y a pas d’erreur dans les fichiers fournis par les responsables de
modules (étudiants non inscrits, fautes de frappes sur les noms, etc.). La même approche peut
être utilisée pour éviter les erreurs dans les codes de modules.
Q.4.b :
Vous pouvez également enrichir la classe Etudiant réalisée en TP de Prog/Java en lui ajoutant
un attribut modulesSuivits de type Set qui contient les modules auxquels un étudiant est
inscrit. Il est alors possible d’utiliser cette structure pour calculer la moyenne de l’étudiant.
Q.4.c :
Vous pouvez généraliser ce TP de plusieurs manières. La transformation d’un fichier texte en
hashTable est souvent utile. Une méthode plus générale doit permettre d’indiquer le numéro
de la colonne contenant la clef à utiliser, et les numéros des colonnes qui doivent être
récupérées (sous forme d’un vecteur) ainsi que le comportement souhaité lorsqu’une même
clef est présente plusieurs fois dans le fichier (erreur, seule une ligne est retenue,
concaténation, etc.).
Université Montpellier II Place Eugène Bataillon
34095 Montpellier Cedex5, France
Téléchargement