Documente Academic
Documente Profesional
Documente Cultură
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");
}
}
Prog2
public class Prog2 {
public static void main(String args) {
System.out.println("Bonjour");
}
}
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;
p. 3
double
2.5
float
5.3f
truc
machin
int
boolean
true
int
12323
=
=
=
=
=
=
=
=
=
=
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
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 ?
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) :
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)
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);
}
}
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
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.
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
p. 10