IN3S02 – TP5 2011/2012 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 In3s02 sur
votre compte.
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.
Par exemple, la commande java Moyenne 9.5 10 15 devra au point 5 afficher moyenne=11.5
3.
Modifier cette fonction pour qu’elle accepte maintenant
un tableau de String au lieu du
tableau de double. Nous
supposerons que chaque String
représente bien un double (par
ex.: "3.14").
Aide : découvrir la méthode parseDouble()
de la classe Double ne sera pas
une perte de temps !
Contrainte pour tout l’exercice 1 : Ne pas utiliser de tableau
intermédiaire.
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 ! .
Cet exercice va consister à
réaliser l’exercice décrit dans le sujet du TD5 bis (à lire très attentivement).
Créer dans le répertoire tp5, précédemment créé, un
nouveau projet BlueJ de nom eratosthene.
<A> Attention ! Déclarer les méthodes et les deux attributs aTab et aMax en protection paquetage
pour pouvoir tout tester depuis une classe de test extérieure à la classe Eratosthene.
<B>
Créer pour l’instant un constructeur à un paramètre entier qui
initialise uniquement aMax.
<C> Dès que la méthode initV() est écrite, tester
son bon fonctionnement en incorporant par copier/coller la classe EratostheneTest dans votre projet [clic
droit, Create Test Class], puis exécuter les tests.
Tout est vert ? (interdiction de modifier EratostheneTest)
Écrire ensuite successivement raye() et prepare().
<D> 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. <E>
Écrire ensuite successivement estPremier() et affiche().
<F> 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()pour obtenir tous les
nombres premiers inférieurs ou égaux à pN
- ’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 tp5 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).