IN101 – TP5 2011/2012 v3
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.
Booter
sous Linux. Visualiser le sujet
dans un navigateur pour bénéficier des liens, mais la version
imprimable est plus agréable à lire (à l’écran ou sur papier) .
Créer un répertoire tp5 dans In101 sur votre
compte.
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 tp5 précédemment créé.
Lancer BlueJ et ouvrir, le fichier .jar sauvegardé ci-dessus. [ menu Project, choix Open 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 autre que celle déjà présente.
- Définir dans le projet weblog-analyzer une nouvelle classe de nom HourCount, comportant deux attributs : un entier aHour et un entier aCount, un 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 aHourCounts, 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 aHourCounts 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 vTabHours2 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 vTabHours2 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 places. 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 [F7] les 2 dernières méthodes de test. Tout est vert ?
1.
Créer un nouveau projet moyenne sous BlueJ et créer 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. A la fin de l’exercice 2,
par
exemple, la commande java Moyenne 9.5 10 15 devra au point 5. afficher moyenne=11.5
4.
Transformer cette fonction en procédure à un seul paramètre (le nombre d’éléments utiles sera
considéré comme égal à la taille du tableau). D’autre part, elle ne devra plus
retourner le résultat, mais l’afficher. S'il n'y a aucun nombre, afficher le
message pas de nombre !
.
Tester procedureMoyenne()
dans la classe MoyenneTest ;
tout est vert ?
Cet exercice va consister à
réaliser l’exercice décrit dans ce sujet de
TD.
Lire les explications sur la méthode du crible d’Eratosthène au début de
l’exercice 6 dans le sujet de TD.
Créer dans le répertoire tp5, précédemment créé, un
nouveau projet BlueJ de nom eratosthene.
A) Créer les 2 attributs aMax
et
aTab (point 1 du TD).
Tester testAttributs() dans EratostheneTest.
(vous aurez aussi besoin d'ajouter dans le répertoire du projet le fichier
eratos.in)
Tout est vert ?
B) Créer le constructeur à un
paramètre entier (point 2 du TD) en
commentant [F8] l’appel à prepare().
Tester testConstructeur() dans EratostheneTest. Tout est vert ?
C) Écrire la procédure prepare()(point 3 du TD) en commentant [F8] les appels à initV() et raye(). Décommentez maintenant [F7] l’appel à prepare() dans le constructeur.
D) Écrire la procédure initV() (point 4 du TD).
Tester testInitV() dans EratostheneTest. Tout est vert ?
E) Écrire la procédure raye() (point 5 du TD). Décommentez [F7] les 2 appels dans prepare().
Tester testRaye() dans EratostheneTest. Tout est vert ?
F) Écrire la procédure estPremier() (point 6 du TD).
Tester testEstPremier() dans EratostheneTest. Tout est vert ?
G) Écrire la procédure affiche() (point 7 du TD).
Bouton [Run Tests] dans BlueJ. 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 « à la main ».
Si pas fait antérieurement, générer
(après l’avoir complétée !) la documentation des 2 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.1).