Exercices if-iif-switch en java - TP traitement conditionnel en java
Comprendre les niveaux d’imbrication
Exercice 1 :
Exécutez à la main (c’est-à-dire ligne par ligne) ce programme. Pour cela, vous supposerez que la valeur saisie au clavier soit 4. Quel est le résultat affiché ?{
public static void main (String [] parametre)
{
double x, r ;
System.out.print("Entrer un chiffre :") ;
x = Lire.d() ;
if (x > = 0)
{
r = Math.sqrt(x) ;
}
else
{
r = Math.sqrt(-x) ;
}
System.out.print("Pour "+x+" Le resultat est: "+r) ;
} // Fin du main ()
} // Fin de la Class Racine
Même question en supposant la valeur saisie égale à – 9.
Construire une arborescence de choix
Exercice 2 :
Représentez graphiquement les choix arborescents suivants :if (Condition 1)
{
if (Condition 2)
{
if (Condition 3)
{
instruction A
}
}
else
{
instruction B
}
}
else
{
instruction C
}
Exercice 3 :
Écrivez un programme qui résolve les équations du second degré à l’aide de structures if-else imbriquées.
Soit l’équation ax2 + bx + c = 0, où a, b, et c représentent les trois coefficients entiers de l’équation. Pour trouver les solutions réelles x, si elles existent :
a. Établissez l’arbre des choix associés :
1. a = 0
1.1. b = 0
1.1.1. c = 0 tout réel est solution
1.1.2. c != 0 pas de solution
1.2. b != 0 une seule solution : x = - c / b ;
2. a != 0
2.1. b2 - 4ac >= 0 deux solutions :
x1 = - b + Math.sqrt(b * b – 4 * a * c) / 2 * a ;
x2 = - b - Math.sqrt(b * b – 4 * a * c) / 2 * a ;
2.2. b2 - 4ac < 0 pas de solution dans les réels
b. Déterminez les différentes variables à déclarer.
c. À partir de l’arbre des choix, écrivez les instructions if-else suivies du test correspondant.
d. Placez dans chaque bloc if ou else les instructions de calcul et d’affichage appropriées.
e. Placez l’ensemble de ces instructions dans une fonction main() et une classe portant le nom SecondDegre.
Manipuler les choix multiples, gérer les caractères
Exercice 4 :
En utilisant la structure switch, écrire un programme qui simule une machine à calculer dont les opérations soient l’addition (+), la soustraction (–), la multiplication (*) et la division (/).
a. En cours d’exécution, le programme demande à l’utilisateur d’entrer deux valeurs numériques puis le caractère correspondant à l’opération à effectuer.
Suivant le caractère entré (+–*/) le programme affiche l’opération effectuée, ainsi que le résultat.
L’exécution du programme peut, par exemple, avoir l’allure suivante (les valeurs grisées sont celles saisies par l’utilisateur) :
Entrez la seconde valeur : 3
Type de l’operation (+, -, *, /) : *
Cette operation a pour resultat : 2 * 3 = 6
b. Après avoir écrit et exécuté le programme avec différentes valeurs, saisissez dans cet ordre les valeurs suivantes : 2, 0 puis /. Que se passe-t-il ? Pourquoi ?
c. Modifiez le programme de façon à ne plus rencontrer cette situation en cours d’exécution.
-------------------------------------------------------------------------------------------------------------
Correction - Solution des exercices java
-------------------------------------------------------------------------------------------------------------
Solution exercice 1 :
Entrer un chiffre : 4
Pour 4 le resultat est 2
Explication : x a pour valeur 4. Le contenu de la variable x est donc supérieur ou égal à 0. Le programme exécute donc l'instruction r = Math.sqrt (4)
Si la valeur saisie au clavier est -9, le résultat affiché à l'écran est :
Entrer un chiffre : -9
Pour –9 le resultat est 3
Explication : x a pour valeur –9. Le contenu de la variable x est donc strictement inférieur à 0. Le programme exécute le bloc else, c'est à dire l'instruction r = Math.sqrt (-(-9))
Solution exercice 2 :
Les deux accolades fermantes situées après l'instruction B font que le bloc else instruction C est rattaché au premier if (condition1).
Solution exercice 3 :
a. Arbre des choix :
b. Les variables à déclarer sont :
double a, b, c, x, x1, x2 ;
c. Les instructions if-else s'écrivent de la façon suivante :
if (a == 0)
{
if (b == 0)
{
if (c == 0)
{
// bloc d'instructions I
}
else
{
// bloc d'instructions II
}
}
else
{
// bloc d'instructions III
}
}
else
{
if (b*b – 4*a*c < 0)
{
// bloc d'instructions IV
}
else
{
// bloc d'instructions V
}
}
d. Dans chaque bloc if ou else, les instructions de calcul et d'affichage appropriées sont les suivantes :
• Le bloc d'instructions I :
System.out.println("tout reel est solution") ;
• Le bloc d'instructions II :
System.out.println("il n'y a pas de solution") ;
• Le bloc d'instructions III :
x = -c/b ;
System.out.println("la solution est " + x) ;
• Le bloc d'instructions IV :
System.out.println("il n'y a pas de solution dans les reels") ;
• Le bloc d'instructions V : Attention de bien placer les parenthèses pour obtenir un résultat cohérent.
x1 = (-b + Math.sqrt(b*b – 4*a*c)) / (2*a) ;
x2 = (-b - Math.sqrt(b*b – 4*a*c)) / (2*a) ;
System.out.println("il y deux solutions egales a " + x1 + " et " + x2) ;
e. En insérant l'ensemble des instructions dans la classe SecondDegre et à l'intérieur d'une fonction main(), le programme complet s'écrit de la façon suivante :
public class SecondDegre {
public static void main (String [] arg) {
double a, b, c, delta ;
double x, x1, x2 ;
System.out.print("Entrer une valeur pour a : ") ;
a = Lire.d() ;
System.out.print("Entrer une valeur pour b : ") ;
b = Lire.d() ;
System.out.print("Entrer une valeur pour c : ") ;
c = Lire.d() ;
if (a == 0) {
if (b == 0) {
if (c == 0) {
System.out.println("tout reel est solution") ;
}
else {
System.out.println("il n'y a pas de solution") ;
}
}
else {
x = -c / b ;
System.out.println("la solution est " + x) ;
}
}
else {
delta = b*b - 4*a*c ;
if (delta < 0) {
System.out.println("il n'y a pas de solution dans les reels") ;
}
else {
x1 = (-b + Math.sqrt(delta))/ (2*a) ;
x2 = (-b - Math.sqrt(delta))/ (2*a) ;
System.out.println("il y deux solutions egales a " + x1 + " et " + x2) ;
}
}
}
}
Remarquez les instructions de saisie des trois coefficients a, b, c nécessaires à la bonne marche du programme ainsi que l'utilisation d'une variable intermédiaire delta utilisée pour éviter la répétition du même calcul b*b – 4*a*c.
Solution exercice 4 :
a. Le code source complet :
public class Calculette {
public static void main( String [] argument) {
int a, b;
char opérateur;
double calcul = 0;
System.out.print("Entrer la premiere valeur : ");
a = Lire.i();
System.out.print("Entrer la seconde valeur : ");
b = Lire.i();
System.out.print("Type de l'operation : (+, -, *, /) : ");
opérateur = Lire.c();
switch (opérateur ) {
case '+' : calcul = a + b;
break;
case '-' : calcul = a - b;
break;
case '/' : calcul = a / b;
break;
case '*' : calcul = a * b ;
break;
}
System.out.print("Cette operation a pour resultat : ");
System.out.println(a + " " + opérateur + " "+ b + " = " + calcul);
}
}
b. Exécution du programme avec le jeu de valeurs 2, 0 et /
Entrer la première valeur : 2
Entrer la seconde valeur : 0
Type de l'opération : (+, -, *, /) : /
java.lang.ArithmeticException: / by zero
at Calculette.main(Calculette.java:22)
L'interpréteur détecte une exception de type arithmétique. Il s'agit de la division par zéro.
c. L'erreur provient de la division. Il suffit de vérifier que la valeur de b soit non nulle pour l'étiquette '/' de la structure switch. Examinons la correction :
public class Calculette {
public static void main( String [] argument) {
int a, b;
char opérateur;
double calcul = 0;
boolean OK = true;
System.out.print("Entrer la premiere valeur : ");
a = Lire.i();
System.out.print("Entrer la seconde valeur : ");
b = Lire.i();
System.out.print("Type de l'operation : (+, -, *, /) : ");
opérateur = Lire.c();
switch (opérateur ) {
case '+' : calcul = a + b;
break;
case '-' : calcul = a - b;
break;
case '/' : if ( b != 0) calcul = a / b;
else OK = false;
break;
case '*' : calcul = a * b ;
break;
default : OK = false ;
}
if (OK) {
System.out.print("Cette operation a pour resultat : ");
System.out.println(a + " " +opérateur+ " "+ b + " = " + calcul);
}
else System.out.println("Operation non conforme !");
}
}
A l'étiquette '/', le programme vérifie si le contenu de la variable b est non nul. Si tel est le cas, il exécute normalement l'instruction réalisant la division. Sinon, si le contenu de la variable b est nul, la division n'est pas effectuée mais la valeur false est affectée à la variable OK de type booléen (initialisée par défaut à true lors de la déclaration de la variable).
De cette façon, pour afficher le résultat du calcul, le programme vérifie la valeur de la variable OK. Si elle vaut true, cela signifie que l'opération a été effectuée sans rencontrer de difficulté particulière sinon, cela veut dire qu'aucune opération n'a pu être réalisée. Le programme signale alors par un message que l'opération est non conforme Remarquez que la valeur false est aussi affectée à la variable OK pour l'étiquette default.
Ainsi, si l'utilisateur entre un autre caractère que +, -, / ou *, le programme n'exécute aucun calcul et signale par un message que l'opération est non conforme.
Dans le jargon informatique, on dit que la variable OK est un drapeau (en anglais flag). En effet, il change d'état (de valeur) en fonction des instructions exécutées.
Le terme « drapeau » fait allusion au système de fonctionnement des boîtes aux lettres américaines munies d’un drapeau rouge. Lorsque le facteur dépose du courrier, le drapeau est relevé. Le facteur abaisse le drapeau pour indiquer la présence de courrier. Lorsque le destinataire prend son courrier, il relève le drapeau, indiquant que la boîte est désormais vide. Ainsi, la position (état) du drapeau indique la présence (drapeau abaissé) ou non (drapeau levé) de courrier, dans la boîte aux lettres.
Article plus récent Article plus ancien