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