Module BA3a - séminaire Java 17 octobre 2016 - (CUI)

publicité
Module BA3a - séminaire Java
17 octobre 2016
Exercices de programmation Java - deuxième série
(à rendre jusqu’au 30 octobre)
Ces exercices portent sur les bases du langage Java, chapitre 4 et 5
1) Instructions de contrôle
1.1) Quelle est la sortie produite par l’instruction “do … while” suivante
int i = 0, somme = 0;
do {
i++;
somme += i;
}
while (i < 10) ;
System.out.println(“somme : ” + somme);
1.2) Ecrire une instruction équivalente à 1.1 en utilisant l’itération “for”
1.3) Que produit l’instruction imbriquée “for” suivante
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j % 2 == 0) continue;
System.out.println(i + “ - ” + j) ;
}
if (i / 2 > 0) break;
}
1.3) Quelle est la sortie produite par l’instruction “switch” suivante
char c = ‘b’ ;
switch (c) {
case ‘a’: System.out.println(1); break ;
case ‘b’: System.out.println(2); break ;
case ‘c’: System.out.println(3); break ;
case ‘d’: System.out.println(4); break ;
default: System.out.println(“pas de conversion”) ;
}
1.4) Soit l’instruction “switch” suivante
switch (n) {
case 0: System.out.println(“nul”) ;
case 1:
case 2: System.out.println(“petit”); break ;
case 3:
case 4: System.out.println(“moyen”) ;
default: System.out.println(“grand”) ;
}
quelle est la sortie produite pour chacune des valeurs de n suivantes 0, 1, 3, 10, -5 ?
(tiré de Claude Delannoy, Exercices en Java, 2e edition, 2006 )
Luka Nerima
Faculté des lettres
1
Module BA3a - séminaire Java
17 octobre 2016
2) Précédence des opérateurs
Réécrire les expressions suivantes en éliminant toutes les parenthèses inutiles
1.a) (a + b) + (c + 11)
1.b) (a * b) – (c * 11)
1.c) (a + b) – (c + 11)
1.d) (a * b) / (c * 11)
1.e) (((a + b) * c) % 11)
1.f) (a + (-b)) / ((-c) % 11)
1.g) ((a == 15) && g) || (b == 15)
1.h) “Java “ + ((1 + 1) + “.“ + 0)
3) Syntaxe
Quelles sont les erreurs syntaxiques dans les suites d’instructions suivantes ?
2.a) if (a > b) System.out.println(“ suffisant ”)
else System.out.println(“ insuffisant ”) ;
2.b) if (a > b) { System.out.println(“ suffisant ”) ; b := a }
2.c) switch (a + b ) {case 11 : System.out.println(“ résultat : onze”) ; break ;
case c : System.out.println(“ résultat : “ + c) ; break ;
}
2.d) for (int i == 2 ; i == 10 ; i + 2) {sum += i * i ; j++ ; }
Luka Nerima
Faculté des lettres
2
Module BA3a - séminaire Java
17 octobre 2016
4) Programmation
Pour chacun des énoncés ci-dessous, développer l’algorithme puis écrire le
programme à l’aide d’une classe contenant une seule méthode main, déclarée
public static void main(String arg[]). Au besoin, utiliser le tableau
de paramètres “String args[]” pour récupérer leur valeurs effectives et les
convertir de la manière suivante (par exemple, pour le premier paramètre:
- String -> int : int x = Integer.parseInt(args[0])
- String -> double : double y = Double.parseDouble(args[0])
Résoudre au moins un énoncé de chaque groupe Itérations, Conditions, Combinaisons
Itérations
4.1) Ecrire un programme qui affiche une table de conversion CHF <-> EURO
4.2) Ecrire un programme qui affiche une table de conversion degrés Celsius <->
degrés Farenheit
4.3) Ecrire un programme qui liste les nombres entiers a et b, 0 < a < b < 100, t.q. le
résultat de l’expression (a2 + b2 + 1) / (a + b) est un nombre entier
4.4) Ecrire un programme Java qui implémente l’algorithme de multiplication « à la
Russe » décrit à la fin de l’énoncé (p. 4)
Conditions
4.5) Ecrire un programme Java qui convertit un nombre entier en chiffres romains,
p.e. 2002 donnera MMII
4.6) Ecrire un programme qui convertit une heure donnée sous forme numérique
(heures et minutes) en expression du langage usuel. P.e. :
10h10 -> dix heure dix
12h45 -> une heure moins le quart
0h00 -> minuit
Combinaisons
4.7) Ecrire un programme qui calcule et affiche toutes les manières d’arriver à une
somme de 1 franc avec des pièces de 5, 10, 20 et 50 centimes. Par exemple, une ligne
de l’affichage sera “20 x 5c”.
4.8) Modifiez le programme 4.7 pour arriver à n’importe quelle somme, en ajoutant
les autres pièces de monnaie Suisse (1f, 2f et 5f)
4.9) Ecrire un programme qui donne toutes les solutions possibles du puzzle
arithmétique ci-dessous (on affecte un chiffre différent à chacune des 10 lettres):
INFO
Ex de solution: O=0 A=1 I=2 K=3 F=4
2640
+ JAVA
J=5 N=6 L=7 U=8 V=9
+ 5191
------
------
LUKA
7831
Luka Nerima
Faculté des lettres
3
Module BA3a - séminaire Java
17 octobre 2016
Algorithme de multiplication (connu sous le nom de multiplication à la russe*):
La multiplication de deux nombres entiers positifs peut se faire de la manière
suivante:
• Ecrivez le multiplicateur et le multiplicande l’un à côté de l’autre.
• Formez une colonne en dessous de chacun des opérandes en itérant la règle suivante
jusqu’à ce que le nombre sous le multiplicateur soit égal à 1: divisez par deux le
nombre sous le multiplicateur, sans tenir compte du reste éventuel, et doublez par
addition le nombre sous le multiplicande. Par exemple, pour multiplier 19 par 45,
vous obtenez :
45
22
11
5
2
1
19
38
76
152
304
608
• Finalement, rayez tous les nombre de la colonne du multiplicande correspondant à la
ligne paire sous le multiplicateur. Il ne reste plus qu’à additionner les nombres
restants : 19 + 76 + 152 + 608 = 855.
Remarque : cet algorithme, en essence, est la méthode employée dans les circuits
électronique de nombreux ordinateur. Ceci s’explique par le fait qu’avec cette
méthode il n’est pas nécessaire de mémoriser de table de multiplication, que la
division par deux est très simple à réaliser avec des circuits électroniques (revient à
faire un décalage à droite d’une position binaire) et que les unités de calcul
comprennent forcément un additionneur.
*Source : G.Brassard, P.Bratley, algorithmique, conception et analyse, Masson, Paris,
1987.
Luka Nerima
Faculté des lettres
4
Téléchargement