IFT1015, Hiver 2008
Examen Pratique
Lundi 31 mars 2008
Durée: 1h45
Professeur: Pascal Vincent
Toute documentation est permise, sauf l'internet, et le travail des voisins!
Note: vous ne pouvez utiliser que les fonctionalités de base de Java vues en cours.
En gros les seules classe
préexistantes que vous avez le droit d'utiliser sont String,
System.out, et Keyboard (ainsi que les types et fonctionalités
de base et les tableaux).
Toute autre classe devra être votre propre création!
Premier exercice: Traducteur Français -> Javanais
Contraintes et indications
Contrainte: pour cet exercice, les seules méthodes de
manipulation de chaînes de caractère (String) prédéfinies dans Java que vous
êtes autorisés à utiliser sont:
- la méthode length qui retourne la taille d'une chaîne de caractère.
- la méthode charAt qui retourne le caractère qui se trouve à une position donnéee dans la chaîne.
- l'opérateur + pour concaténer des chaînes de
caractère ou ajouter un caractère à une
chaîne.
Vous ne devrez utiliser aucune autre méthode de String ou
StringUtil (telles que split, unsplit, join, substring, etc...)
Attention, à bien des égards, une chaîne de caractère (String) est un peu comme un tableau de carctères (char []).
Mais ils diffèrent par leur utilisation, voici un rappel de
quelques différences importantes entre chaîne et tableau:
- pour obtenir la taille d'une chaîne de caractère s on fait s.length(), mais pour la taille d'un tableat t, on fait t.length (sans parenthèses!).
- l'accès aux éléments d'un tableau se fait
avec [] alors que l'accès aux caractères d'une
chaîne se fait avec la méthode charAt.
- alors qu'on peut changer la valeur des éléments d'un tableau, on ne peut pas changer les caractères d'une chaîne existante en Java (on dit que les chaînes sont "immutable") .
Note: vous n'avez pas besoin d'utiliser de tableaux pour résoudre cet exercice.
Explication de l'exercice
Le but de cet exercice est d'écrire un programme Javanais.java qui va vous permettre de traduire le Français en "Javanais".
Le javanais est un dialecte amusant du Français (et difficile
à comprendre pour une oreille pas entraînée!).
Pour traduire du Français en Javanais il suffit, dès
qu'une consonne est suivie d'une voyelle (a,e,i,o,u), d'insérer
les lettres av entre les deux.
Voici des exemples de mots ou de phrases en Français et de leur traduction en Javanais
(j'ai indiqué en gras les av inséré pour que ce soit plus clair).
gros -> gravos
bonjour -> bavonjavour
penible -> pavenaviblave
bonjour a tous! -> bavonjavour a tavous!
Pour cet exercice on considère que les voyelles sont
a,A,e,E,i,I,o,O,u,U et que tout caractère qui n'est pas une voyelle ou
un espace est une consonne.
(vous n'avez pas à gérer le cas des voyelles accentuées).
Selon cette définition, vous devez dans votre programme écrire:
- une fonction voyelle qui retourne un boolean indiquant si le caractère passé en paramètre est une voyelle.
- une fonction consonne qui retourne un boolean indiquant si le caractère passé en paramètre est une consonne.
- une fonction javanais qui reçoit en paramètre une chaîne de caractère (String) en français et construit et retourne sa traduction en Javanais.
- une fonction main qui lit des lignes au clavier avec une méthode appropriée de Keyboard et affiche leur traduction en Javanais, et ceci tant que Keyboard.isEof() est false.
On rapelle que vous pouvez interrompre votre programme a tout moment avec la combinaison de touche Control C.
On rapelle aussi que Keyboard.isEoF() deviendra true
quand vous tapez Control D (donc c'est un autre moyen d'arrêter
votre programme quand il attend que vous entriez une ligne).
Exemple d'utilisation du programme: vérifiez que le vôtre donne bien le même résultat!
(Les parties entrées par l'utilisateur sont
en caractères de taille fixe, les parties affichées par le programme sont en taille fixe gras)
java Javanais
Bonjour
Bavonjavour
Bonne chance a tous!
Bavonnave chavancave a tavous!
Il etait une fois un petit chaperon rouge...
Il etavait unave favois un pavetavit chavapaveravon ravougave...
On devrait pouvoir utiliser un tel programme pour facilement traduire un texte complet contenu dans un fichier texte.
Par exemple vous pouvez copier le fichier chaperon_rouge.txt depuis le compte démo vers votre répertoire de travail:
cp /u/dift1015/RessourcesJava/chaperon_rouge.txt chaperon_rouge.txt
Vous pouvez visionner ce fichier (en Français) en l'ouvrant par exemple avec emacs
Et vous devriez pouvoir en afficher la traduction en Javanais à l'aide de votre programme avec la commande:
java Javanais < chaperon_rouge.txt
Ceci devrait afficher la version Javanaise du conte du Petit Chaperon Rouge qui devrait commencer comme ceci:
Il etavait unave favois unave pavetavitave favillave dave vavillavagave, lava plavus javolavie qavu'avon eut savu vavoir;
sava maverave en etavait favollave, et sava maverave-gravand plavus favollave encavorave.
...
On demande de faire la remise du fichier Javanais.java
Après vous être au besoin connecté sur la
machine remise (avec ssh remise) et être retourné à
l'endroit où se trouve votre fichier, faites:
remise ift1015 expratique Javanais.java
Deuxième exercice: programmation objet, trouver les gros rectangles
Ecrire un fichier Rectangle.java dans lequel vous allez définir une classe Rectangle, possédant les propriétés private: hauteur et largeur.
Ecrivez pour cette classe les méthodes d'objet (non statiques) public suivantes:
- Un constructeur prenant en argument les valeurs des propriétés du rectangle.
- Une méthode aire qui calcule et retourne l'aire du rectangle.
- Une méthode affiche qui affiche à l'écran les propriétés du rectangle sur une seule ligne sous la forme (ex:)
Rectangle de hauteur 3 et de largeur 2. Son aire est 6.
La méthode affiche devra obligatoirement faire appel à la méthode aire pour calculer l'aire avant de l'afficher.
Ecrivez ensuite un fichier TrouverGrosRectangles.java qui va contenir les méthodes suivantes:
- Une méthode static afficheGrosRectangles
qui prend en paramètre un tableau de Rectangles et qui affiche (grâce à
leur méthode affiche) seulement les "gros" rectangles. On considère
"gros" tous ceux qui ont une aire supérieur ou égale à 10.
- Une méthode static saisieRectangle
qui ne prend aucun paramètre, et va demander à
l'utilisateur d'entrer au clavier une hauteur et une largeur, va
créer un Rectangle avec ces propriétés et le
retourner.
Le programme TrouverGrosRectangles sera
appelé en lui passant en paramètre sur la ligne de
commande le nombre de rectangles qu'on veut entrer au clavier.
Sa fonction main devra créer et remplir un tableau de rectangles de la taille
ainsi indiquée, en faisant appel de manière répétée à la méthode saisieRectangle().
Pour finir elle devra afficher seulement les gros rectangles parmi ceux
entrés (en faisant appel à afficheGrosRectangles).
Ex d'utilisation du programme (pour 5 rectangles):
java TrouverGrosRectangles 5
Entrez le rectangle 0
hauteur?
2
largeur?
3
Entrez le rectangle 1
hauteur?
1
largeur?
5
Entrez le rectangle 2
hauteur?
8
largeur?
2
Entrez le rectangle 3
hauteur?
10
largeur?
10
Entrez le rectangle 4
hauteur?
2
largeur?
1
Voici les gros rectangles que j'ai trouve:
Rectangle de hauteur 8.0 et de largeur 2.0. Son aire est 16.0
Rectangle de hauteur 10.0 et de largeur 10.0. Son aire est 100.0
On demande de faire la remise des fichier Rectangle.java et TrouverGrosRectangles.java
remise ift1015 expratique Rectangle.java TrouverGrosRectangles.java
EN TOUT VOUS DEVRIEZ AVOIR REMIS 3 FICHIERS: Javanais.java, Rectangle.java, TrouverGrosRectangles.java