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:
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:
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:
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:
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:
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