|
Le signe © renvoie à la correction |
A. Téléchargez ici un fichier de texte contenant une suite de nombres flottants (représentables dans le type float) appartenant à l’intervalle [0 ; 1[. Écrivez une méthode qui lit ces nombres, détermine et affiche leur répartition en 10 classes de même largeur ([0 ; 0.1[, [0.1 ; 0.2[, [0.2 ; 0.3[, etc.).
Pour la lecture des nombres intéressez-vous à la classe java.util.Scanner.
Exemple d’affichage du résultat :
dans [0.0 ; 0.1[ --> 7 valeurs dans [0.1 ; 0.2[ --> 30 valeurs dans [0.2 ; 0.3[ --> 104 valeurs etc.
B. Même question que ci-dessus, mais le fichier est maintenant binaire (on peut le télécharger ici). Pour la lecture vous emploierez la classe java.io.DataInputStream.
A. Ecrivez une méthode qui détermine l’ensemble des mots distincts d’un fichier de texte.
Pour extraire les mots du texte utilisez un objet java.io.StreamTokenizer (étudiez cette classe) ; pour représenter l’ensemble des mots distincts utilisez un des objets implémentant l’interface java.util.Set.
B. Ecrivez une méthode qui détermine le nombre d’occurrences de chaque mot d’un fichier de texte. Outre un StreamTokenizer comme ci-dessus, utilisez une des implémentations de l’interface java.util.Map.
Écrivez une méthode lister qui prend pour argument le nom d’un répertoire de votre système et qui affiche la liste des fichiers et dossiers qu’il contient. Dans le cas d’un fichier, affichez à côté du nom la date de dernière modification du fichier et sa taille en octets. Dans le cas d’un dossier, affichez (récursivement) les fichiers et dossiers contenus, en laissant à gauche une marge plus importante pour refléter l’inclusion.
Par exemple, voici l’affichage produit sur un système Windows par l’appel de lister avec pour argument un dossier nommé AtelierC :
AtelierC Atelier enumere_sequences.c (10/11/09 14:41) 10582 octets fusion_suite.c (30/10/09 17:42) 534 octets ... StrDos.c (16/01/10 09:10) 1206 octets tp4-1-C++ Bibliotheque.cpp (19/01/10 00:31) 575 octets Bibliotheque.h (19/01/10 00:14) 377 octets ... Revue.h (18/01/10 23:17) 276 octets Untitled1.c (29/01/10 09:39) 2 octets ComparaisonTotale ComparaisonTotale.c (24/09/09 12:28) 6590 octets _Menage.bat (02/11/08 09:21) 319 octets Projet CodeBlocs à cloner.zip (09/11/08 10:24) 1070 octets Projet Visual C++ à cloner.zip (09/11/08 10:23) 2547 octets
Indication. Les principales informations dont vous avez besoin peuvent être obtenues par les méthodes des objets java.io.File.
Le but de cet exercice est d’essayer la classe ObjectOutputStream qui permet d’enregistrer dans un fichier un objet aussi complexe soit-il et ObjectInputStream qui permet ensuite de recréer l’objet à partir du fichier dans lequel il a été précédemment enregistré.
Récupérez les classes de l’exercice 4.5 (Abstraction, classes abstraites, interfaces : codage d’une expression arithmétique) et remplacez le programme de test que nous y avions écrit (TestExpression) par deux programmes distincts :
N.B. Pour qu’un objet ait le droit être sauvé dans un fichier ou restauré depuis un fichier (on dit « soit sérialisé ») il faut déclarer qu’il implémente l’interface java.io.Serializable, mais cela est une simple marque car cette interface est vide et n’impose l’écriture d’aucune méthode. Dans notre cas, cela implique qu’il faudra modifier ainsi la déclaration de Expression
:
public interface Expression extends Serializable { double valeur(double x); }
Dans une page html – comme celle que vous êtes en train de lire – les hyperliens sont indiqués par des balises <a>
. Par exemple, le lien site du journal Le Monde, sur lequel il suffit de cliquer pour atteindre la page d’accueil de ce journal, est codé par le texte <a href="http://www.lemonde.fr/">site du journal Le Monde</a>
. On dit que « http://www.lemonde.fr/
» est l’URL du site en question.
A. L’exercice consiste à écrire un programme pour extraire toutes les URL contenues dans une page html donnée.
1. Commencez par obtenir, sous forme de String, la totalité du fichier html. Pour cela, créez un objet FileReader et utilisez sa méthode read(char[] buf) pour lire tous les caractères du fichier (la classe File vous permet de savoir combien il y en a).
2. Il faut ensuite écrire l’expression régulière décrivant un texte de la forme
<a href="http://www.lemonde.fr/"
(ne cherchez pas à décrire un texte plus grand, il peut y avoir d’autres paramètres entre la fin de l’URL et le caractère > qui termine la balise). La suite de votre programme ressemblera à ceci :
String expReg = "l'expression régulière en question"; Pattern motif = Pattern.compile(expReg); Matcher reconnaisseur = motif.matcher(texte); int position = 0; while (reconnaisseur.find(position)) { String s = texte.substring(reconnaisseur.start(), reconnaisseur.end()); System.out.println(s); position = reconnaisseur.end(); }
L’affichage produit peut ressembler à ceci (c’est un cas réel) :
<a href="http://www.sciences.univmed.fr/" <a href="http://localhost:803/" <a href="http://kiosque.luminy.univ-mrs.fr/" <a href="http://localhost:801/~garreta/" <a href="https://auth.univmed.fr/index.jsp" <a href="../Site Dil/index.html" <a href="http://www.dil.univ-mrs.fr/~garreta/" ...
B. En créant un « groupe » dans l’expression régulière, améliorez le programme précédent pour que l’affichage soit plutôt celui-ci :
http://www.sciences.univmed.fr http://localhost:803 http://kiosque.luminy.univ-mrs.fr http://localhost:801/~garreta https://auth.univmed.fr/index.jsp ../Site Dil/index.html http://www.dil.univ-mrs.fr/~garreta ...