IN101 : Sujet du TD5
ESIEE Engineering, Denis BUREAU, 2009/2010.

1  Les objectifs

2  Fonction moyenne

Écrire une fonction moyenne qui retourne la moyenne de nombres réels (des notes sur 20 par exemple) passés en paramètre (pour une promo de 120 étudiants, on ne va pas passer 120 paramètres ...).
Comme toujours dans l'utilisation des tableaux, il est possible que certaines cases ne soient pas utilisées. Aussi, on passera en paramètres non seulement le tableau de réels, mais aussi le nombre de valeurs utiles dans le tableau (en faisant l'hypothèse classique que toutes les cases non utilisées se trouvent à la fin du tableau).

3  Fonction minimum

Écrire une fonction minimum qui prend en paramètre un tableau de réels et son nombre d'éléments utiles, et qui retourne l'indice de la plus petite valeur présente dans le tableau.
Si cette valeur est présente dans plusieurs cases, la fonction retournera le plus grand indice parmi ces cases.
Contrainte : Si la valeur minimale existe de nombreuses fois dans le tableau, ne pas faire d'affectations inutiles.

4  Classe Matrice

Le but est de réaliser une classe permettant d'afficher la racine cubique, la racine carrée, la valeur, le carré, et le cube des nombres entiers de 0 à n.
  1. Définir comme attribut l'entier n et un tableau bi-dimensionnel de réels.
    0.0 0.0 0.0 0.0 0.0
    1.0 1.0 1.0 1.0 1.0
    1.26 1.414 2.0 4.0 8.0
  2. Définir un constructeur à un paramètre (n) qui initialisera les attributs ; il se contentera d'allouer le tableau bi-dimensionnel de n+1 lignes et de 5 colonnes, puisque la procédure suivante le remplira.
  3. Écrire une procédure initMat sans paramètre qui remplira le tableau avec les valeurs spécifiées précédemment. La procédure Arrays.fill() peut-elle avoir un intérêt dans certains cas ?
    Il est souhaitable de définir (non localement) des constantes entières (RCUB, RCAR, VAL, CAR, CUB, par exemple) pour rendre plus clair l'accès à chaque colonne de cette matrice.
  4. Écrire une procédure afficheMat sans paramètre qui affiche la matrice sur n+1 lignes en espaçant les valeurs par une tabulation (\t). Les valeurs seront arrondies à 3 décimales.
    Aide :
    La fonction Math.round() retourne l'entier le plus proche du nombre réel passé en paramètre.

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 2 3 /

 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.
Déclarer également un attribut aMax correspondant à la limite évoquée précédemment.
  1. Écrire une procédure initV qui initialise à VRAI les aMax-1 derniers éléments du tableau, pour signifier qu'a priori, tous les nombres entiers (sauf 0 et 1) sont candidats à être premiers.
  2. Écrire une procédure raye qui applique la méthode décrite ci-dessus en mettant FAUX dans chaque case du tableau correspondant à un nombre qu'elle doit "rayer" (inférieur ou égal à aMax).
    Contrainte : aucun test de divisibilité .
    Remarque : il est inutile de parcourir TOUS les nombres jusqu'à aMax.
    Question : quand peut-on arrêter la boucle principale ?
  3. Écrire une procédure prepare qui commencera par créer le tableau de booléens avec la bonne taille en fonction de aMax, puis appellera les procédures initV et raye.
  4. Écrire un constructeur à un paramètre qui initialise aMax puis qui appelle la procédure prepare.
  5. Écrire une fonction booléenne estPremier qui prend en paramètre l'entier à tester et détermine si l'entier est premier ou non.
  6. Écrire une procédure affiche qui affiche l'intégralité des nombres premiers figurant dans le tableau, à raison de 10 par ligne (utiliser des tabulations).
Exemple d'affichage :
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  Fonction mmm

Écrire une fonction mmm (comme Minimum+Moyenne+Maximum) qui prend en paramètre un tableau de réels et son nombre d'éléments utiles, et qui retourne un tableau de 3 réels contenant le minimum, la moyenne, et le maximum du tableau en entrée.
Cette fonction n'utilisera qu'une seule boucle pour ne parcourir chaque case du tableau qu'une seule fois.

Notes:

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


File translated from TEX by TTH, version 3.74.
On 17 Mar 2009, 19:14.