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);
}
}