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