Devoirs Hebdomadaire N°14
CDL...DH1
4

JAVA n° 1


M. Joseph DASSE BRIKA

 

ESC/JAVA prend comme premier exemple le programme :

class Bag {
  int[] a;
  int n;

  Bag(int[] input) {
    n = input.length;
    a = new int[n];
    System.arraycopy(input, 0, a, 0, n);
  }

  int extractMin() {
    int m = Integer.MAX_VALUE;
    int mindex = 0;
    for (int i = 1; i <= n; i++) {
      if (a[i] < m) {
        mindex = i;
        m = a[i];
      }
    }
    n--;
    a[mindex] = a[n];
    return m;
  }
}

QUESTION 1 : Spécifiez en français la méthode extractMin. Vous semble-t-il sans erreur ? sinon corrigez.

i.e. écrivez en français, en 4 lignes maximum, le plus précisemment possible "ce que fait" (l'EFFET de) la méthode extractMin.


QUESTION 2 : Quelle est la signification de l'instruction , System.arraycopy(input, 0, a, 0, n); ? Où trouve -t-on (dans quelle classe de quel package) la méthode arraycopy ?


QUESTION 3 : Transformez la classe Bag.java en une application (ajout d'une méthode main notamment) qui permet de tester la méthode extractMin.


QUESTION 4 : Montrez la trace d'un "bon test" de la méthode extractMin.

remarque : lors du test les données seront prises sur la ligne de commande.

Question 1
Effet de la méthode extractMin:
Cette méthode parcours un tableau d'entier afin d'enregistrer la valeur et l'indice de l' élément de valeur minimale. La longueur du tableau est  ensuite diminuée de un élément, le dernier élément du tableau étant copiée à la place de l'élément de valeur min.

Les appels successifs de cette méthode retourne donc la valeur des éléments du plus petit au plus grand.

Pour un tableau de longueur n, l'indice du premier élément est égal à 0 et l'indice du dernier élément est n-1.

Méthode initiale: Méthode corrigée:
int extractMin() {
    int m = Integer.MAX_VALUE;
    int mindex = 0;
    for (int i = 1; i <= n; i++) {
      if (a[i] < m) {
        mindex = i;
        m = a[i];
      }
    }
    n--;
    a[mindex] = a[n];
    return m;
  }
int extractMin() {
    int m = Integer.MAX_VALUE;
    int mindex = 0;
    for (int i = 0; i < n; i++) {
      if (a[i] < m) {
        mindex = i;
        m = a[i];
      }
    }
    n--;
    a[mindex] = a[n];
    return m;
  }
Question 2
signification de l'instruction , System.arraycopy(input, 0, a, 0, n):
La méthode arraycopy provient de la classe System du package java.lang. Cette méthode copie un tableau source à partir d'un certain indice dans un tableau destination à partir d'un indice sur une longueur spécifiée. 
System.arraycopy(src, int srcPos, dest, int destPos, int length)
 
Question 3
/**
 * La classe Bag permet de travailler sur la copie d'un tableau d'entier et d'extraire 
 * successivement les valeurs minimales sans detruire le tableau original passé en paramètre.
 * @author OUDARD Claude I013351 
 * @version 03/04/2004
 */
class Bag {
  int[] a;
  int n;
  
   /**
  * Constructeur d'objet de la classe Bag
  * Initialise n à la longueur du tableau passé en paramètre et a une copie du 
  * tableau passé en paramètre.
  * 
  * @param Tableau d'entier
  */
  public Bag(int[] input) {
    n = input.length;
    a = new int[n];
    System.arraycopy(input, 0, a, 0, n);
  }

  /**
  * Recherche l'indice de l'élément de valeur minimum de la copie du tableau
  * d'initialisation de l'objet, réduit n la longueur de la copie du tableau,
  * puis copie la valeur du dernier élément du tableau à la place de l'élément 
  * le plus petit trouvé.
  * 
  * @param      aucun
  * @return     valeur du plus petit élément du tableau 
  */
  int extractMin() {
    int m = Integer.MAX_VALUE;
    int mindex = 0;
    for (int i = 0; i < n; i++) {
      if (a[i] < m) {
        mindex = i;
        m = a[i];
      }
    }
    n--;
    a[mindex] = a[n];
    return m;
  }
  
  /**
  * Méthode main de test de la classe
  * 
  * @param      liste d'entier 
  */
  public static void main (String[] args){
      int lg = args.length;
      int[] tab = new int[lg];
      try{
          // Recupération des parametres dans le tableau d'entier tab
          for (int i=0; i < lg; i++ ){
              tab[i] = Integer.parseInt(args[i]);
          }
          // Initialisation et utilisation de la classe Bag
          Bag myBag = new Bag(tab);
          for (int i=0; i < lg; i++ ){
              tab[i] = Integer.parseInt(args[i]);
              System.out.println("Le min du tableau est:" + myBag.extractMin());
          }    
      }catch(Exception e){
          System.out.println("Il faut passer une liste d entiers en ligne de commande.");
      }
          
  }
  
}
Question 4
Trace du test du programme de la question 3:

 

FIN_dh14

ACCUEIL CONTACT FAVORIS ANNALES DH1 DH2 DH3 DH4 DH5 DH6 DH7 DH8 DH9 DH10 DH11 DH12 DH13 DH14 DH15 DH16