Précédent Remonter Suivant

Annexe I  Corrigé des exercices

Exercice 1

Les erreurs sont indiquées par des commentaires ci-dessous :
        boolean b;
        double a2 = 5.2;
        int k = 5;
        int j = k;
        int i = 7;
        char a = i;     // On ne peut pas affecter un entier à un caractère
        int k = 7;      // La variable k a déjà été déclarée
        int l = t;      // On utilise une variable t non (encore) déclarée
        int t = 7;
  

Exercice 2

        int i = 13;                // i = 13
        int j = 5;                 // j = 5
        i = i % 5;                 // i = 3
        j = j * i + 2;             // j = 17
        int k = (i * 7 + 3) / 5;   // k = 4

Exercice 3

  public class Point2D {
    double x;
    double y;
  }
  public class Point3D {
    double x;
    double y;
    double z;
  }
  public class VilleFrance {
    String nom;
    int codePostal;
  }
  public class VilleMonde {
    String nom;
    int codePostal;
    String pays;
  }
NB : dans le dernier cas, on pourrait aussi définir une classe Pays et écrire :
  public class VilleMonde {
    String nom;
    int codePostal;
    Pays pays;
  }

Exercice 4

La première fonction peut s'écrire de différentes manières ; la plus condensée est probablement la suivante :
    public static int max(int n, int m) {
        return (n > m) ? n : m;
    }
Pour écrire la deuxième fonction, on a d'abord besoin de définir une fonction auxiliaire qui calcule xy, x et y étant deux entiers :
    public static int puissance(int x, int y) {
        int res = 1;
        int p = 0;
        while (p < y) {
            p++;
            res *= x;
        }
        return res;
    }
Ensuite la fonction f s'écrit tout simplement :
    public static int f(int n) {
        return puissance(2, n) + puissance(3, n);
    }
Pour la troisième fonction, on a recours aux fonctions définies dans la classe Math de la bibliothèque standard de Java, et à une conversion d'un réel vers un entier :
    public static int se(double x) {
        // Il faudrait provoquer une exception si x est négatif
        return (int) Math.floor(Math.sqrt(x));
    }
Bien entendu, toutes ces fonctions doivent être définies dans une classe pour qu'elles puissent être compilées et utilisées...

Exercice 5

    public static int max(int[] tab) {
        int res = 0;           // résultat provisoire
        if (tab.length > 0) {  // Au moins un élément
            res = tab[0];      // On initialise par la valeur du premier élément
        }
        // A partir du deuxième et jusqu'à la fin, chercher un plus grand que
        // le résultat provisoire et remplacer celui-ci, le cas échéant
        for (int i = 1 ; i < tab.length ; i++) {
            if (tab[i] > res) {
                res = tab[i];
            }
        }
        return res;
    }
    public static int somme(int[] tab) {
        int s = 0;
        for (int i = 0 ; i < tab.length ; i++) {
            s += tab[i];
        }
        return s;
    }
    public static int estALIndice(int[] tab, int n) {
        int indice = -1;
        for (int i = 0 ; i < tab.length ; i++) {
            if (tab[i] == n) {
                indice = i;
                break; // pas besoin de poursuivre le parcours du tableau
            }
        }
        return indice;
    }

Exercice 6

public class Item {
    private String nom;
    private int quantité;
    private double prixUnitaire;

    Item(String n, int q, double pu) {
        \emph{nom = n;}
        \emph{quantité = q;}
        \emph{prixUnitaire = pu;}
    }

    public double prix() {
        \emph{return quantité * prixUnitaire;}
    }
}  

Exercice 7

public class Rectangle {
    private Point coinSupGauche;
    private Point coinInfDroit;

    Rectangle(Point p1, Point p2) {
        coinSupGauche = new Point(Math.min(p1.getX(), p2.getX()),
                                  Math.min(p1.getY(), p2.getY()));
        coinInfDroit = new Point(Math.max(p1.getX(), p2.getX()),
                                 Math.max(p1.getY(), p2.getY()));
    }

    \textit{public double aire() {}
        \textit{return (coinInfDroit.getX() - coinSupGauche.getX()) *}
            \textit{(coinInfDroit.getY() - coinSupGauche.getY());}
    \textit{}}

    \textit{public boolean plusPetitQue(Rectangle r) {}
        \textit{return aire() < r.aire();}
    \textit{}}
}

Exercice 8

public static int fib(int n) {
    // Stricto sensu il faudrait provoquer une erreur pour n négatif
    if (n <= 1) {
        return 1;
    }
    else {
        return fib(n-1) + fib(n-2);
    }
}

Précédent Remonter Suivant