IN3R11-1 – TP5
2010/2011 v2
Sujet (n’imprimer le pdf qu’une seule fois par
poste de travail)
Durée : 3 h
Nota : le travail demandé doit être terminé, en séance ou, à défaut, hors séance.
Visualiser
le sujet dans un navigateur pour bénéficier des liens.
Créer un répertoire tp5
dans In3R11 sur
votre compte.
1.
Créez un nouveau fichier Moyenne.java pour contenir la classe Moyenne sans attribut ni constructeur, dans
laquelle nous construirons progressivement
une méthode permettant de calculer la moyenne des nombres présents sur la ligne
de commande.
Par exemple, la commande java Moyenne 9.5 10 15 devra afficher moyenne=11.5
Cet exercice va consister à
réaliser l’exercice décrit dans le sujet
du TD5.
Créer dans le répertoire tp5, précédemment créé, un
nouveau projet BlueJ de nom eratosthene.
Attention ! Déclarer deux attributs aTab et aMax, et pour pouvoir tester les
différentes méthodes depuis l’extérieur de cette classe, laisser toutes les
méthodes en public.
Créer pour l’instant un constructeur à un paramètre entier qui
initialise uniquement aMax.
Dès que la méthode initV() est écrite, tester
son bon fonctionnement en incorporant par copier/coller la classe EratostheneTest dans votre projet, puis
exécuter les tests.
Tout est vert ? (interdiction de modifier EratostheneTest)
Écrire ensuite successivement raye() et prepare().
Tester au fur et à mesure le bon
fonctionnement de chacune de ces 2 méthodes en décommentant la procédure
de test correspondante dans la classe EratostheneTest, puis exécuter les tests.
Tout est vert ? Compléter
maintenant le constructeur comme indiqué dans le TD.
Écrire ensuite successivement estPremier() et affiche().
Tester au fur et à mesure le bon
fonctionnement de chacune de ces 2 méthodes en décommentant la procédure
de test correspondante dans la classe EratostheneTest, puis exécuter les tests.
Tout est vert ?
Passer un paramètre
caractère pC et un paramètre entier pN et tenir compte des consignes
suivantes :
- Le paramètre pC sera
interprété comme une commande : display, greatest, help
- Le paramètre pN sera
interprété différemment selon la commande ci-dessous
- ’d’ appellera affiche()
- ’g’ devra trouver le plus grand
nombre premier inférieur ou égal à pN
- ’h’ affichera un message d’aide
listant les commandes possibles (pN ne sert à rien dans ce cas)
- tout autre caractère
provoquera l’affichage d’un message d’erreur signalant la commande "h,0"
Vérifier le bon fonctionnement de ce
programme en testant extensivement.
Les serveurs web maintiennent habituellement des fichiers d'historique des accès aux pages web qu'ils supportent. Ces fichiers sont appelés fichiers log.
L'analyse de ces fichiers permet d'obtenir des informations utiles comme : quelles sont les pages les plus consultées, quelles sont les périodes de consultation les plus chargées, ...
Le projet weblog-analyzer sur lequel nous allons travailler est un programme qui réalise une analyse élémentaire d'un fichier log simplifié (fourni). C'est dans ce cadre que nous créerons et gérerons des tableaux.
Télécharger le fichier weblog-analyzer.jar lié à cet énoncé, et l’enregistrer dans le répertoire tp4 précédemment créé.
Lancer BlueJ et ouvrir, le fichier .jar sauvegardé ci-dessus. [ menu Projet, choix Ouvrir non-BlueJ ... ].
Le projet weblog-analyzer est composé
de 4 classes. Nous nous intéresserons essentiellement à la classe LogAnalyzer. Ce programme
réalise une analyse temporelle d'un petit fichier log.
Nommé weblog.txt, il se trouve maintenant dans le répertoire tp5/weblog-analyzer. Il contient une suite de dates au format "année mois jour heure minute", chaque ligne étant censée correspondre à un accès à une page web du serveur. Visualiser le contenu de ce fichier et en prendre connaissance.
Editer et prendre connaissance de la classe LogAnalyzer. La méthode analyzeHourlyData compte combien d'accès ont été réalisés dans chaque tranche horaire pendant toute la durée couverte par le log. Le résultat est mémorisé dans le tableau hourCounts.
Créer un objet de la classe LogAnalyzer et exécuter la méthode analyzeHourlyData puis la méthode printHourlyCounts. Quels sont les moments les plus chargés et les moins chargés d'une journée ?
On se propose
d'ajouter à la classe LogAnalyzer
de nouvelles méthodes d'analyse. Aucune de ces méthodes ne devra comporter
d'instruction d'affichage.
- Définir dans le projet weblog-analyzer une nouvelle classe de nom HourCount, comportant deux attributs : un entier hour et un entier count, de constructeur HourCount(int pHour, int pCount), et offrant deux méthodes d'accès : getHour() et getCount().
- Dans la classe LogAnalyzer, définir une fonction rankHours2 (combien de paramètres ?) qui, en analysant le tableau hourCounts, renvoie un tableau de type HourCount[] des tranches horaires classées par valeurs décroissantes de compteur (mais tranches croissantes si compteurs égaux).
- Exemple : Supposons que le tableau hourCounts soit le suivant :
Elément
45 12 8
72 45 3
75 80 10
12 33 80
Indice
0 1
2 3
4 5
6 7
8 9 10
11
Le tableau rankHours2 serait initialisé
comme suit :
Elément 0;45
1;12 2;8 3;72
4;45 5;3 6;75 7;80 8;10
9;12 10;33 11;80
Indice
0
1 2
3
4
5 6 7 8 9 10
11
Le résultat de rankHours2 trié serait le
tableau suivant :
Elément 7;80 11;80 6;75
3;72 0;45 4;45 10;33 1;12 9;12 8;10
2;8 5;3
Indice
0
1 2
3 4
5
6
7
8
9
10 11
- Aide : Pour trier le tableau, on peut employer le « tri à bulles ». Cette méthode consiste à répéter un « parcours » jusqu’à ce que celui-ci n’ait produit aucun échange de place. Un parcours consiste à parcourir tout le tableau en comparant les valeurs situées dans 2 cases consécutives et en les échangeant si elles ne sont pas dans le bon ordre.
- Tester cette méthode en décommentant les 2 dernières méthodes de test. Tout est vert ?
Si pas fait antérieurement, générer
(après l’avoir complétée !) la documentation des 3 exercices, puis
sauvegarder les projets ouverts, puis fermer BlueJ [ menu Project, choix Quit ]. Se déloger.
Ce sujet a été élaboré par Denis Bureau (d’après un sujet d’Albin Morelle pour le 2.3).