Vous êtes sur la page 1sur 10

c Fabrice Rossi, 1997-2002

Conditions de distribution et de copie


Cet ouvrage peut etre distribue et copie uniquement selon les conditions qui suivent :
1. toute distribution commerciale de louvrage est interdite sans laccord prealable explicite de
lauteur. Par distribution commerciale, on entend une distribution de louvrage sous quelque
forme que ce soit en echange dune contribution financi`ere directe ou indirecte. Il est par
exemple interdit de distribuer cet ouvrage dans le cadre dune formation payante sans autorisation prealable de lauteur ;
2. la redistribution gratuite de copies exactes de louvrage sous quelque forme que ce soit est
autorisee selon les conditions qui suivent :
(a) toute copie de louvrage doit imperativement indiquer clairement le nom de lauteur de
louvrage ;
(b) toute copie de louvrage doit imperativement comporter les conditions de distribution et
de copie ;
(c) toute copie de louvrage doit pouvoir etre distribuee et copiee selon les conditions de
distribution et de copie ;
3. la redistribution de versions modifiees de louvrage (sous quelque forme que ce soit) est interdite sans laccord prealable explicite de lauteur. La redistribution dune partie de louvrage
est possible du moment que les conditions du point 2 sont verifiees ;
4. lacceptation des conditions de distribution et de copie nest pas obligatoire. En cas de non
acceptation de ces conditions, les r`egles du droit dauteur sappliquent pleinement a` louvrage.
Toute reproduction ou representation integrale ou partielle doit etre faite avec lautorisation
de lauteur. Seules sont autorisees, dune part, les reproductions strictement reservees a` lusage
prive et non destinees a` une utilisation collective, et dautre part, les courtes citations justifiees
par le caract`ere scientifique ou dinformation de loeuvre dans laquelle elles sont incorporees
(loi du 11 mars 1957 et Code penal art. 425).

Exercices
Fabrice Rossi
24 septembre 2002

Forme g
en
erale dun programme

Exercice 1.1 :
Indiquer si les programmes suivants sont corrects. Si ce nest pas le cas, indiquer la ou les
erreurs.
1. dans le fichier prog.java :
1
2
3
4
5

Prog1
public class Prog1 {
public void static main(String[] args) {
System.out.println("Bonjour");
}
}

2. dans le fichier Prog2.java :


1
2
3
4
5

Prog2
public class Prog2 {
public static void main(String args) {
System.out.println("Bonjour");
}
}

3. dans le fichier Prog3.java :


1
2
3
4
5

Prog3
import dauphine.util.*;
public Prog3 class
public static void main(String[] args)
System.out.println("Bonjour")
}};

Identificateurs

Exercice 2.1 :
Indiquer si les propositions didentificateurs suivantes sont syntaxiquement correctes ou non
(valides en Java) :
compteur
_compteur
1compteur

compteur 2
compteur_3
Compteur@
c_12323
Exercice 2.2 :
Indiquer si les propositions didentificateurs suivent ou non les conventions portant sur les
noms de variables :
UneNote
Une_Note
compteur
Compteur
uneVariable
une_variable
uneNoteDeMath
uneNotedemath

D
eclarations

Exercice 3.1 :
Dessiner la memoire apr`es lexecution par le processeur abstrait des lignes suivantes (on dessinera la memoire apr`es chaque ligne) :
double a,b;
int i=3;
a=2.5;
b=3.7;
b=a+5;
i=i+1;
Exercice 3.2 :

Ecrire
un programme permettant dobtenir la configuration de la memoire donnee par la figure 1.

Affectations et calculs

Exercice 4.1 :
Indiquer dans le programme suivant quelles sont les affectations correctes et celles qui sont
impossibles (chaque ligne incorrecte est ignoree).
double x;
float y;
int a;
boolean b;
char c;
byte d;

F. Rossi 24 septembre 2002 (Version 2.2)

p. 3

double
2.5

float
5.3f

truc

machin

int

boolean
true
int
12323

Fig. 1 Representation de la memoire


x
y
a
b
c
d
a
b
x
d

=
=
=
=
=
=
=
=
=
=

12;
-2.343e-10f;
2323232;
2;
a;
-324;
2.5;
true;
r;
125;

Exercice 4.2 :
Que font les instructions suivantes (on suppose que les variables x et y sont declarees, de type
double et dej`a initialisees) :
x = x + y;
y = x - y;
x = x - y;
Remarque : ne surtout jamais utiliser cette technique dans un veritable programme !
Exercice 4.3 :
On consid`ere que les declarations suivantes ont ete effectuees :
int i=3,j=4;
double x=2,y=3;
boolean v=true;
F. Rossi 24 septembre 2002 (Version 2.2)

p. 4

Pour chaque expression du tableau suivant, indiquez :


1. le type du resultat ;
2. la valeur du resultat ;
3. si laffectation de cette valeur a` la variable declaree dans la colonne variable du tableau
est possible.
Chaque ligne est independante des autres. Faites bien attention de ne pas confondre la lettre
l et le chiffre 1.
Expression

type

valeur

variable

possible

i/j-1

int k ;

2-3/i+1

double z ;

(float)2.5

int k ;

3f

double z ;

2+3l

int k ;

1/i/2d

int k ;

2/i/j

double z ;

2f+3l

float u ;

v&&(i-x/y>j)

int k ;

y/x+1

int k ;

Analyse dexpressions

Exercice 5.1 :
Convertir sous forme dexpressions Java les quatre formules suivantes. La valeur de lexpression
une fois calculee par le processeur doit etre la plus exacte possible (`a cause des arrondis, il est
parfois impossible dobtenir le resultat exact mathematiquement) :
2+

2.51.5
1.210.3

4
1

5 1+

1
2

1+

1
2

1+

1
1
2

Exercice 5.2 :
On consid`ere les expressions suivantes :
b && x==y+2d || !(3*x%2>t)
x/(y+d/k)/(1-j)
x%y>y
b || !b
x/y*y+x%y
b || (x/y>x+y && !b)
Quels types peut-on choisir pour les variables qui apparaissent dans les expressions afin que
celles-ci soient correctes ? Quel est alors le type de chacune des expressions ? Peut-on determiner
la valeur de certaines expressions sans connatre les valeurs des variables ?

F. Rossi 24 septembre 2002 (Version 2.2)

p. 5

Exercice 5.3 :
x, y et z designent des variables de type double. Reecrire les expressions Java suivantes sous
leur forme mathematique usuelle.
3*x - 4*y - x*x
(x + 4)/(x + 1/x)
5 - (1/x + 1/3 + y) / z - 1
3*x + x*x*y*y - 2/x/y
Exercice 5.4 :
On suppose que les declarations suivantes ont ete effectuees :
int n;
double x;
On suppose que n contient la valeur n et x la valeur x. Traduisez les expressions suivantes en
Java, de sorte que le resultat obtenu soit le plus exact possible. On tentera de simplifier les
expressions, en passant eventuellement par des variables intermediaires.
2n + 1
1 )(1 1 )
(1 + n
n
1 x 1
(n pair et n 6= 0)
3x + 12
2
+
3 (x + 1)2
1
3
15
1+ x+
x2 +
x3
n
n(n + 2)
n(n + 2)(n + 4)

Expressions bool
eennes

Exercice 6.1 :
Traduire sous forme dexpression booleenne les propositions suivantes :
1. la variable x contient une valeur numerique comprise au sens large entre 3.5 et 7 ;
2. la variable x contient une valeur negative strictement ou bien une valeur superieure a` 5 ;
3. lune des deux propositions suivantes est vraie :
la variable y contient une valeur divisible par 2 ;
la variable y ne contient pas une valeur divisible par 3.
4. une et une seule des deux propositions suivantes est vraie :
la variable x nest pas nulle ;
la variable z contient la meme valeur que la variable x ;
5. soit le contenu de la variable a est divisible par celui de b, soit le contenu de la variable
b est divisible par celui de a.
Exercice 6.2 :
Traduire sous forme dune phrase en francais la plus simple possible chacune des expressions
suivantes (pour la redaction des reponses, on prendra pour mod`ele lexercice precedent) :

F. Rossi 24 septembre 2002 (Version 2.2)

p. 6

! (
! (
x%3
! (

x != 2 && x < 3 )
u > v || u%2 == 0 && u-v > 10 )
== 0 ^ x%4 == 0
x < 3 || x > 5 )

M
ethodes de classe

Exercice 7.1 :
Pour chacun des appels suivants, indiquer la signature de lappel :
A.f(2.5,3)
A.g(true,3f)
A.h(2l,5d)
B.f()
B.g((byte)3)
Exercice 7.2 :
On suppose donnee une methode f dans une classe A. Quelles sont la (ou les) signature(s)
possible(s) pour f si les deux appels suivants sont acceptes par le compilateur :
A.f(2,3.5)
A.f(3l,4l)
Meme question avec g dans la classe A et les appels :
A.g(3f,true)
A.g(4l,false)
Exercice 7.3 :
Indiquer le type du resultat de chacun des appels suivants :
Math.sqrt(-2)
Math.sqrt(4)
Math.sqrt(4l)
Math.sqrt(2f)
Math.max(2l,3)
Math.max(4f,3d)
Math.min(2.5,-3)
Math.abs(-2.5)
Math.abs(-2)
Math.abs((byte)-4)

F. Rossi 24 septembre 2002 (Version 2.2)

p. 7

Saisie et affichage

Exercice 8.1 :
Indiquer si les programmes suivants sont corrects. Si ce nest pas le cas, indiquer la ou les
erreurs. Pour chaque programme correct, on suppose que lutilisateur saisit les valeurs 3.4 et
5.2 dans cet ordre. Quel est alors laffichage produit par le programme ?
1. dans le fichier Saisie1.java :
1
2
3
4
5
6
7
8
9

Saisie1
import dauphine.util.*;
public class Saisie1 {
public static void main(String[] args) {
Console.start();
int x=Console.readDouble();
double y=Console.readInt();
System.out.println(x/y);
}
}

2. dans le fichier Saisie2.java :


1
2
3
4
5
6
7
8
9

Saisie2
import dauphine.util.*;
public class Saisie2 {
public static void main(String[] args) {
Console.start();
int x=Console.readInt();
double y=Console.readDouble();
System.out.println(x/y);
}
}

Exercice 8.2 :

1
2
3
4
5
6
7
8
9

Indiquer laffichage produit par le programme suivant :


Display
public class Display {
public static void main(String[] args) {
int x=3,y=5/x;
System.out.println("x+y="+x+y);
System.out.println("x+y="+(x+y));
System.out.println("x/y="+x/y);
System.out.println("x/y="+(x/y));
}
}

F. Rossi 24 septembre 2002 (Version 2.2)

p. 8

S
election

Exercice 9.1 :
On donne le programme suivant :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

Selection
import dauphine.util.*;
public class Selection {
public static void main(String[] arg) {
Console.start();
double a=Console.readDouble();
int b=Console.readInt();
if (a>b) {
b=b+1;
}
if (b<4) {
if (a<0) {
a=a-b;
} else {
int
b=b+(int
int)a;
}
System.out.println("moins que 4");
} else {
System.out.println("plus que 4");
b=b-4;
}
System.out.println("a="+a);
System.out.println("b="+b);
}
}
1. Donnez lorganigramme du programme ;
2. Pour chaque couple de valeurs suivant, indiquez laffichage produit par le programme si
lutilisateur saisit ces valeurs dans lordre :
premi`ere valeur seconde valeur
2.3
-2
2.3
3
4
3
-2
5
-2
1

Exercice 9.2 :
Ecrire un programme qui determine le signe (affiche sour la forme -1, 0 ou 1) et la valeur
absolue dune valeur reelle saisie au clavier.
Exercice 9.3 :
Ecrire un programme qui saisit trois nombres, puis teste si lun des trois est egal a` la somme
des deux autres.

F. Rossi 24 septembre 2002 (Version 2.2)

p. 9

Exercice 9.4 :
Ecrire un programme qui demande a` lutilisateur de saisir 2 reels a et b et qui affiche les reels
c et d tels que sin([a, b]) = [c, d].
Exercice 9.5 :
Ecrire un programme qui demande a` lutilisateur les 6 coefficients du syst`eme
(

ax + by = c
dx + ey = f

puis qui affiche la solution du syst`eme si elle existe.


Exercice 9.6 :
Un examen comporte trois epreuves notees n1, n2, n3, ponderees par trois coefficients c1, c2,
c3, fixes a priori. Ecrire un programme qui saisit au clavier ces trois notes, calcule la moyenne
ponderee de ces trois notes, puis affiche la mention correspondante : Ajourne (n < 10), Passable
(10 n < 12), ABien (12 n < 14), Bien (14 n < 16), TBien(n > 16).
Exercice 9.7 :
Presenter sous forme de menu (permettant le choix de la conversion souhaitee) un utilitaire de
conversion des unites anglo-saxonnes en unites francaises :
centim`etre en inch (1 inch = 2,54 cm),
m`etre en foot (1 foot =30,48 cm),
m`etre en yard (1m = 1,08 yard),
kilom`etre en mile (1 mile = 1609 m).

F. Rossi 24 septembre 2002 (Version 2.2)

p. 10