IN101 : Sujet du TP6
Groupe ESIEE, Denis BUREAU, janvier 2006.
Attention ! Le sujet peut être modifié jusqu'à la veille du TP.

1  Les objectifs

Être capable de réaliser sur machine des programmes mettant en oeuvre les notions vues au TD6. Les noms de classes et de méthodes sont impératifs pour que les tests automatiques fonctionnent. Il est important de lire l'énoncé d'un exercice jusqu'au bout avant de commencer à traiter la première question de cet exercice, et ensuite de respecter scrupuleusement les consignes indiquées.
Pour chaque exercice de ce tp, déclarer une classe sans attribut dont toutes les méthodes sont static pour pouvoir les utiliser sans avoir à créer d'objet.

2  Classe Palindrome

Le but est de réaliser une méthode permettant de détecter si deux mots ou phrases sont des palindrômes ; c'est-à-dire qui se lisent indifféremment dans les deux sens, en ignorant les caractères non-alphabétiques et les différences minuscules/majuscules ; voir exemples à la section 2.5.
Pour cela, 4 versions différentes (mais dans la même classe Palindrome) seront réalisées pour mettre en oeuvre des possibilités différentes de Java.
Les méthodes estPalindrome1, estPalindrome2, estPalindrome3, et estPalindrome4 prendront toutes un seul paramètre (la chaîne de caractères à analyser) et renverront un résultat booléen. Elles utiliseront les méthodes de la classe Character pour vérifier qu'un caractère est bien une lettre de l'alphabet et pour convertir une lettre en minuscule.

2.1  estPalindrome1 : String charAt(i)

2.2  estPalindrome2 : tableau[i]

2.3  estPalindrome3 : ArrayList get(i)

2.4  estPalindrome4 : reverse equals

2.5  Les tests

3  Classe Matrice

Le but est de réaliser des méthodes permettant d'afficher la racine cubique, la racine carrée, la valeur, le carré, et le cube des N premiers nombres entiers strictement positifs.
  1. Écrire une fonction a3Chiffres qui prend un paramètre réel et qui le retourne tronqué au-delà de 3 chiffres après la virgule.
  2. Écrire une fonction initMat qui prend un paramètre entier N et qui retourne un tableau bi-dimensionnel de N lignes et de 5 colonnes contenant les valeurs spécifiées précédemment,
    en passant par la fonction a3Chiffres pour les racines.
  3. Écrire une procédure afficheMat qui prend en param
    etre une matrice telle que décrite ci-dessus et qui l'affiche en espaçant les valeurs par des tabulations (\t).
  4. Essai à la main :
    écrire une procédure essai qui appellera initMat avec la le paramètre 20 puis qui appellera afficheMat.
  5. Automatiquement :
    insérer dans le projet la classe MatriceTest , faire Tout tester, puis cliquer sur chaque ligne non "verte" pour connaître la raison de l'échec.

4  Classe Moyenne

Le but est de réaliser une fonction permettant de calculer la moyenne d'un ensemble de nombres réels. La méthode moyenne3 à réaliser est celle de la 3ème version de l'exercice du TD6.
  1. Écrire une fonction moyenne3 prenant un paramètre de type ArrayList de Double et retournant un double.
  2. Pour la tester à la main :
    écrire une procédure essaiMoyenne3 qui demande un nombre à l'utilisateur et l'ajoute à la collection tant que ce nombre est positif ou nul. Il suffit ensuite d'afficher le résultat de la fonction moyenne3.
  3. Pour la tester automatiquement :
    insérer dans le projet la classe MoyenneTest , faire Tout tester, puis cliquer sur chaque ligne non "verte" pour connaître la raison de l'échec.

5  Classe Eratosthene

Le crible d'Ératosthène est une méthode pour découvrir les nombres premiers. Il consiste à mettre tous les entiers (inférieurs à une certaine LIMITE) dans une grille, puis à rayer méthodiquement tous les multiples des nombres non encore rayés.
Exemple :
debut :  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
raye 2:  2  3  /  5  /  7  /  9  / 11  / 13  / 15  / 17  / 19  / 21  / 23  / 25
raye 3:  2  3     5     7     /    11    13     /    17    19     /    23    25
raye 5:  2  3     5     7          11    13          17    19          23     /
raye 7:  ...
 
On constate alors qu'il ne reste plus que des nombres premiers dans la grille.
En informatique, il est toutefois difficile de "rayer" un nombre. On choisit donc de déclarer (comme attribut de la classe) un tableau de booléens dont la première case ne sera pas utilisée 1 et dont chaque case suivante représentera le nombre entier correspondant à son indice : si la valeur de la case est true, c'est que l'entier correspondant n'est pas rayé. Et rayer un nombre signifiera donc passer la case correspondante à false.
  1. Écrire une procédure initV qui initialise à VRAI les N-1 derniers éléments du tableau passé en paramètre, pour signifier qu'a priori, tous les nombres entiers (sauf 0 et 1) sont candidats à être premiers (N est également passé en paramètre).
  2. Écrire une procédure raye qui applique la méthode décrite ci-dessus en mettant FAUX dans le tableau passé en paramètre pour chaque case correspondant à un nombre qu'elle doit "rayer" (inférieur ou égal au nombre N également passé en paramètre).
    Remarque : il est inutile de parcourir TOUS les nombres jusqu'à N.
    Question : quand peut-on arrêter la boucle principale ?
  3. Écrire une fonction prepare qui prend en paramètre le nombre N (correspondant à la LIMITE évoquée ci-dessus) et qui retourne un tableau de booléens.
    Cette fonction commencera par créer le tableau de booléens avec la bonne taille en fonction de N, puis appellera les procédures initV et raye.
  4. Écrire une fonction booléenne estPremier qui prend en paramètre l'entier à tester et qui utilise évidemment la fonction prepare pour déterminer ensuite si l'entier est premier ou non.
  5. Écrire une procédure affiche qui affiche l'intégralité des nombres premiers figurant dans le tableau passé en paramètre (jusqu'à la limite N également passée en paramètre), à raison de 10 par ligne (utiliser des tabulations).
  6. Pour tester à la main :
    écrire une procédure run qui déclare un tableau de booléens, demande quelle action on veut faire (voir ci-dessous), puis effectue l'action, ceci tant qu'on ne désire pas arrêter le programme.
    Pour choisir l'action, on saisira un nombre de 0 à 3 : On supposera que l'utilisateur n'entre que des nombres entiers.
  7. Pour tester automatiquement :
    insérer dans le projet la classe EratostheneTest , faire Tout tester, puis cliquer sur chaque ligne non "verte" pour connaître la raison de l'échec.
Exemple d'affichage (option 1) :
      2      3      5      7     11     13     17     19     23     29
     31     37     41     43     47     53     59     61     67     71
     73     79     83     89     97    101    103    107    109    113
    127    131    137    139    149    151    157    163    167    173
    179    181    191    193    197    199    211    223    227    229
...
 

6  Classe Anagrammes

Le but est de réaliser une méthode verif permettant de détecter si deux mots (ou deux phrases) sont des anagrammes ou non.
Rappel : Deux mots (ou phrases) sont des anagrammes si et seulement s'ils s'écrivent avec exactement les mêmes lettres, chacune en même quantité.
Exemple : Saintes et Tisanes.
Remarque : Les minuscules sont considérées identiques aux majuscules, et les caractères non alphabétiques sont ignorés dans la comparaison.
La méthode consiste, pour chaque phrase, à stocker dans un tableau le nombre de fois qu'apparaît chaque lettre de l'alphabet. Il suffit ensuite de comparer les deux tableaux : s'ils sont égaux, les deux phrases sont des anagrammes !
  1. Écrire la procédure init0 qui initialise à 0 chaque case du tableau de comptage passé en paramètre (le rôle d'un tableau de comptage est de stocker pour chaque lettre de l'alphabet le nombre de fois qu'elle apparaît dans la phrase).
  2. Écrire la procédure compte qui prend une chaîne de caractères en 1er paramètre et remplit le tableau de comptage passé en 2ème paramètre.
    Contrainte : tout switch est interdit.
    Rappel : des méthodes utiles vous ont été indiquées à l'exercice sur les palindrômes du TD6.
    Aide : "x,  x-x=0
  3. Écrire la fonction booléenne verif qui créera les deux tableaux de comptage (un pour chaque phrase) et qui appellera pour chacun d'eux : Enfin, elle comparera les deux tableaux de comptage.
  4. Pour tester à la main :
    appeler la méthode verif sur les exemples suivants :
    tartines et satiner ne sont pas des anagrammes.
    "Mer : Danger !" et "grand-mere" sont des anagrammes.
  5. Pour tester automatiquement :
    insérer dans le projet la classe AnagrammesTest , faire Tout tester, puis cliquer sur chaque ligne non "verte" pour connaître la raison de l'échec. .


Aide supplémentaire : Pour mettre au point vos programmes, l'utilisation du debugger peut se révéler indispensable. En cliquant dans la marge gauche d'une ligne de programme, vous placerez à cet endroit un breakpoint (panneau STOP); juste avant d'exécuter cette ligne, le programme s'arrêtera et ouvrira le debugger pour vous permettre d'examiner les variables (double-cliquer quand c'est une référence vers un objet) et d'avancer ensuite pas à pas.


Notes:

1 pour ne pas perturber votre réflexion sur cet algorithme non trivial
2 apparitions


File translated from TEX by TTH, version 3.70.
On 02 Jan 2006, 18:52.