Université de Nice Sophia-Antipolis
DU IG - Introduction à la programmation objet

Contrôle du 24 novembre 2010 - Durée : 1h.

Seuls documents autorisés : photocopies des transparents distribués en cours. Les énoncés et corrections des TP sont interdits. Éteignez les téléphones portables.

Important : la présentation et la lisibilité du code compteront dans la note finale. Vous êtes autorisé à écrire le code (et seulement le code) avec un crayon à papier si c'est parfaitement lisible (pas de crayon trop clair).

Ajoutez des commentaires quand vous pensez que ça peut être utile au correcteur. Ne mettez pas de commentaires évidents qui n'ajoutent rien à votre code.

Respectez le découpage en questions et l'ordre des questions. Les numéros des questions devront apparaître clairement sur votre feuille.

  1. (5 points) Écrivez une classe fr.unice.du.TestTableau qui contient une méthode afficheGrandsNombres qui prend un tableau d'entiers en paramètre et qui affiche tous les nombres contenus dans ce tableau qui sont plus grands qu'un nombre donné en deuxième paramètre. Par exemple, si t est un tableau d'entiers qui contient les nombres 5, 456, 25, 8 et 129, afficheGrandsNombres(t, 100) affichera 456 et 129.
  2. (5 points) Dans la même classe écrivez une méthode moyenneGrandsNombres qui prend un tableau d'entiers en paramètre et qui renvoie la moyenne de tous les nombres contenus dans ce tableau qui sont plus grands qu'un nombre donné en deuxième paramètre. Par exemple, si t est un tableau d'entiers, moyenneGrandsNombres(t, 100) renverra la moyenne de tous les nombres contenus dans t qui sont strictement supérieurs à 100.
  3. (5 points) Dans la même classe écrivez une méthode main qui crée un tableau contenant les nombres 5, 456, 25, 8 et 129 et qui utilise la méthode moyenneGrandNombres pour afficher la moyenne des nombres du tableau strictement supérieurs à 100.
  4. (5 points) Dans la même classe ajoutez une méthode grandsNombres qui prend un tableau d'entiers et un nombre en paramètres et qui renvoie un tableau contenant les nombres de ce tableau qui sont plus grand que le deuxième paramètre. Le tableau renvoyé par la méthode ne devra contenir que ces nombres ; par exemple, s'il y a 3 "grands" nombres parmi les valeurs d'un tableau de taille 50, la longueur du tableau renvoyé sera 3.

Correction

package fr.unice.du;

public class TestTableau {
  
  public static void afficheGrandsNombres(int[] t, int borne) {
    for (int n : t) {
      if (n > borne) {
        System.out.println(n);
      }
    }
  }
  
  public static double moyenneGrandsNombres(int[] t, int borne) {
    int somme = 0;
    int nbGrandsNombres = 0;
    for (int n : t) {
      if (n > borne) {
        somme += n;
        nbGrandsNombres++;
      }
    }
    // Peut lancer une exception pour division par 0.
    return (double)somme / nbGrandsNombres;
  }
  
  public static int[] grandsNombres(int[] t, int borne) {
    int[] temp = new int[t.length];
    // position où le prochain grand nombre sera ajouté dans le tableau temp
    int position = 0;
    for (int i = 0; i < t.length; i++) {
      if (t[i] > borne) {
        temp[position++] = t[i];
      }
    }
    // position contient le nombre de grands nombres trouvés
    int[] resultat = new int[position];
    // copie les grands nombres dans resultat
    for (int i = 0; i < position; i++) {
      resultat[i] = temp[i];
    }
    return resultat;
  }

  public static void main(String[] args) {
    int[] t = {5, 456, 25, 8, 129};

    System.out.println(moyenneGrandsNombres(t, 100));

  }

}