TP n˚7

Transcription

TP n˚7
Université de Versailles
IUT de Vélizy - Algorithmique
Vanessa Vitse
2007/2008
TP n˚7
(2 séances)
Tous les exercices doivent être traités, les réponses attendues doivent contenir des explications concises de vos résultats. La clarté de votre rédaction, ainsi que l’orthographe
seront pris en compte dans la note.
Vous rédigerez votre compte rendu dans un fichier type Word (extension .doc ou .odt)
que vous déposerez sur e-campus avant la date limite dans l’espace prévu à cet effet.
Aucun retard ne sera excusé.
Avant de commencer ce TP, vous devez avoir terminé le TP6 et posté votre
compte rendu sur e-campus.
Passage d’arguments au programme par ligne de commande
Un programme Java peut recevoir de la part de l’interpréteur de commandes, qui a lancé
son exécution, une liste d’arguments. Cette liste est la ligne de commande qui a servi à
lancer l’exécution du programme. De façon générale, une telle ligne est composée de la
commande java, du nom de fichier contenant le bytecode exécutable du programme, et
des paramètres de la commande qui sont reçus par la méthode main.
Plus précisément, l’argument de la méthode main qu’on appelle args lorsque l’on écrit
public s t a t i c void main ( S t r i n g [ ] a r g s )
est un tableau de chaı̂nes de caractères contenant chacune un mot de la ligne de commande, le premier élément du tableau contenant le premier paramètre de la commande,
le deuxième élément contenant le deuxième paramètre, etc...
Par exemple, si l’on exécute le programme HelloWorld par
> java HelloWorld Bonjour tout le monde
la méthode main du programme HelloWorld reçoit un tableau à 4 éléments :
args[0]
args[1]
args[2]
args[3]
→
→
→
→
"Bonjour"
"tout"
"le"
"monde"
Exercice 1. Ecrire un programme Echo qui affiche les arguments passés en ligne de
commande, séparés par des espaces. Par exemple, si l’on exécute le programme par
> java Echo heee ooo ...
le programme affichera
heee ooo ...
Indication : l’attribut length d’un tableau donne sa longueur, c’est-à-dire le nombre
d’éléments du tableau.
Tableaux d’entiers
Rappel : la déclaration d’un tableau d’entiers de taille n se fait de la façon suivante :
int tab [ ] = new int [ n ] ;
A chaque fois qu’il vous est demandé d’écrire une nouvelle méthode, il faudra aussi la
tester en l’incluant dans un programme complet qui l’appelle avec les arguments appropriés.
Exercice 2.
1. Ecrire dans une classe TabEntiers, un programme qui commence par lire un entier
n, qui lit n nombres entiers qui seront stockés dans un tableau, puis qui affiche le
contenu de ce tableau.
2. Ecrire une méthode static int maxValue(int[] tab) qui renvoie la valeur maximale du tableau d’entiers passé en paramètre.
3. Ecrire une méthode qui renvoie la valeur minimale d’un tableau d’entiers.
4. On souhaite écrire une méthode qui retourne true si tous les éléments d’un tableau
d’entiers sont identiques, false sinon.
On procédera de deux façons distinctes :
(a) dans une première méthode identique1, on fera appel aux méthodes maxValue
et minValue créées précedemment ;
(b) dans une deuxième méthode identique2, on parcourt directement le tableau
sans utiliser maxValue/minValue.
5. Ecrire une méthode qui prend comme argument un tableau d’entiers et un entier e
et qui renvoie le nombre d’occurrences de e dans le tableau.
6. Ecrire une méthode qui dit si tous les éléments d’un tableau sont uniques.
7. Ecrire une méthode qui prend comme argument un tableau d’entiers et qui vérifie
si ce tableau est trié suivant l’ordre croissant.
8. Ecrire une méthode sommeCarres qui calcule la somme des carrés des entiers stockés
dans un tableau.
9. Ecrire une méthode qui calcule le maximum des valeurs absolues d’un tableau de n
entiers.
10. Ecrire une méthode qui trie un tableau d’entiers et affiche le tableau trié (utiliser
un des tris présentés en cours, par exemple le tri bulle ou le tri par insertion).
2
Chaı̂nes de caractères
Rappels : Pour manipuler les chaı̂nes de caractères, on dispose de plusieurs méthodes,
telles que length, charAt, subString..., qui sont toutes explicitées dans la classe String
de la javadoc.
Par exemple pour accéder au caractère numéro i de la chaı̂ne de caractères s, on utilise
s.charAt(i), pour trouver la longueur de la chaı̂ne s, on utilise s.length(). On peut
donc voir une chaı̂ne de caractères comme un tableau qu’on ne peut modifier.
Exercice 3. Ecrire un programme qui lit un mot et teste si ce mot est un palindrome
(c’est-à-dire un mot qui peut se lire indifféremment de gauche à droite ou de droite à
gauche). Par exemple, “kayak” ou “ressasser” sont des palindromes, alors que “salles” ou
“anima” n’en sont pas.
Exercice 4. Ecrire un programme qui lit une ligne de texte et qui compte le nombre de
fois que cette ligne contient la lettre e suivie immédiatement de la lettre n. Par exemple
la phrase précédente contient 2 fois la sous-chaı̂ne en et celle-ci 3 fois.
Jeu du pendu
Le but de ce jeu célèbre est de deviner un mot dont les lettres sont initialement inconnues.
Le joueur doit proposer une lettre, et si celle-ci est dans le mot, alors toutes les occurrences sont dévoilées. La partie se termine une fois toutes les lettres du mot découvertes.
Voici un exemple de partie :
? ? ? ? ? ? ? ? ?
Lettre ? e
? ? ? ? ? e ? ? ?
Lettre ? u
? u ? u ? e ? ? u
Lettre ? a
? u ? u ? e ? ? u
Lettre ? l
? u l u ? e ? l u
Lettre ? r
? u l u ? e r l u
Lettre ? b
? u l u b e r l u
Lettre ? h
h u l u b e r l u
Felicitations, vous avez gagne !!
Pour la modélisation de ce jeu, un tableau de caractères sera utilisé pour représenter le
mot. Par exemple, le tableau [’d’,’e’,’v’,’i’,’n’,’e’] représente le mot “devine”.
Pour gérer les lettres qui sont connues, on aura aussi un tableau de booléens tel que la case
i contient true ssi la i-ème lettre du mot a été découverte. Par exemple à l’avant-dernière
étape de l’exemple ci-dessus, on aura le tableau [true,true,false,true,true,true].
Le jeu s’arrête lorsque ce tableau ne contient que des true.
3
Exercice 5.
1. Mot vers tableau
Ecrire une méthode static char[] motVersTab(String s) qui prend en paramètre
une chaı̂ne de caractères s et retourne la représentation de cette chaı̂ne par un tableau de caractères comme expliqué précédemment.
2. Affichage
Ecrire une méthode static void affiche(char[] mot, boolean[] vu) qui prend
en argument un tableau de caractères mot et un tableau de booléens vu de mêmes
tailles. Cette méthode doit afficher le mot associé au tableau mot tout en masquant
par le caractère ? les lettres non découvertes (donc celles pour lesquelles correspond
la valeur false dans le tableau vu).
3. Mise à jour du tableau de booléens
Ecrire une méthode static boolean[] metAJour(char[] mot, boolean[] vu,
char c) qui prend en argument un tableau de caractères mot, un tableau de booléens
vu (de mêmes tailles) et un caractère c. La méthode retourne le tableau vu dans
lequel on aura mis à true les cases correspondant aux cases du tableau mot contenant
le caractère c.
4. Fin de partie
Ecrire une méthode static boolean partieFinie(boolean vu[]) qui prend en
argument un tableau de booléens vu et retourne le booléen true ssi le tableau vu
ne contient que des true (et renvoie false sinon).
5. Partie
Ecrire une méthode static void partie(String mot) de type void prenant en
argument une chaı̂ne de caractères mot et qui réalise la partie, c’est-à-dire demande
des lettres à l’utilisateur et affiche le mot avec des ? jusqu’à ce que le mot soit
découvert.
6. Méthode main
Ecrire la méthode main : demander à l’utilisateur de saisir le mot à deviner puis
afficher une centaine de lignes blanches pour que le mot ne soit plus visible dans le
terminal. La partie peut commencer ! !
4