Exercices en Java (04-Structures de contrôle (partie2))

Sébastien ESTIENNE

Ce quatrième chapitre concerne la deuxième partie des structures de contrôle : for, do/while, switch.
Les deux premiers exercices concernent le produit de nombres. Le troisième exercice porte sur la vente d'articles. Le quatrième exercice illustre le théorème de Pythagore.

Les principales notions abordées sont les suivantes :

- Structure de répétitions for ;

- Structure de répétition do/while ;

- Structure de sélection multiple switch ;

- Instructions break et continue ;

- Opérateurs logiques.

Pour faire et comprendre ces exercices, vous aurez besoin d'un certain nombre de notions sur le Java en rapport avec le chapitre. Pour cela, vous pouvez consulter les tutoriels java de developpez à l'adresse suivante : https://java.developpez.com/cours/

La documentation de l'API sur le site de Sun est aussi une mine d'or : http://java.sun.com/javase/6/docs/api/ ♪

- Titre : Exercices en Java (04-Structures de contrôle (partie2))

- Auteur : Sébastien ESTIENNE

- Parution : 5 mai 2007

- Mise à jour : 25 juillet 2007

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2007 Sébastien ESTIENNE. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Produit de nombres

- I-1. Énoncé

- I-2. Aperçu

- I-3. Démonstration

- I-4. Solution

- II. Produit de nombres (2)

- II-1. Énoncé

- II-2. Aperçu

- II-3. Démonstration

- II-4. Solution

- III. Vente d'articles

- III-1. Énoncé

- III-2. Aperçu

- III-3. Démonstration

- III-4. Solution

- IV. Pythagore

- IV-1. Énoncé

- IV-2. Aperçu

- IV-3. Démonstration

- IV-4. Solution

- V. Remerciements

I - Produit de nombres

I-1 - Énoncé

Écrivez une application qui calcule le produit des entiers impairs de 1 à 15 et affiche ensuite le résultat dans une boîte de dialogue.
Utilisez une structure de contrôle for.

Classes de l'API utilisées :

- javax.swing.JOptionPane

I-2 - Aperçu

Aperçu du résultat.

I-3 - Démonstration

Lancer avec Java Web Start

Note : javaws -viewer (accessible aussi dans le panneau de configuration Java) permet de voir les différentes applications JWS en cache et de les gérer.

I-4 - Solution

ProduitFor.java

1. /*

2. * Fichier: ProduitFor.java

3. * Crée le: 03 décembre 2006.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre4;

27. import javax.swing.JOptionPane;

31. /**

32. * <p>Calcule le produit des entiers impairs de 1 à 15.</p>

33. * @author Sébastien ESTIENNE.

34. */

35. public class ProduitFor

36. {

37. /**

38. * <p>Débute l'exécution de l'application.</p>

39. * @param args Les paramètres de la ligne de commande.

40. */

41. public static void main(String[] args)

42. {

43. // Le résultat du produit.

44. int resultat = 1;

46. // Calcule le produit des entiers impairs de 1 à 15.

47. for(int compteur = 1; compteur <= 15; compteur += 2)

48. {

49. resultat *= compteur;

50. }

52. // Affiche le résultat du produit des entiers impairs de 1 à 15.

53. JOptionPane.showMessageDialog(null, "Le produit des entiers impairs de 1 à 15 est : "

54. + resultat + ".");

56. // Termine l'application.

57. System.exit(0);

58. }

59. }

II - Produit de nombres (2)

II-1 - Énoncé

Écrivez une application qui calcule le produit des entiers impairs de 1 à 15 et affiche ensuite le résultat dans une boîte de dialogue.
Utilisez une structure de contrôle do/while.

Classes de l'API utilisées :

- javax.swing.JOptionPane

II-2 - Aperçu

Aperçu du résultat.

II-3 - Démonstration

Lancer avec Java Web Start

Note : javaws -viewer (accessible aussi dans le panneau de configuration Java) permet de voir les différentes applications JWS en cache et de les gérer.

II-4 - Solution

ProduitWhile.java

1. /*

2. * Fichier: ProduitWhile.java

3. * Crée le: 03 décembre 2006.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre4;

27. import javax.swing.JOptionPane;

31. /**

32. * <p>Calcule le produit des entiers impairs de 1 à 15.</p>

33. * @author Sébastien ESTIENNE.

34. */

35. public class ProduitWhile

36. {

37. /**

38. * <p>Débute l'exécution de l'application.</p>

39. * @param args Les paramètres de la ligne de commande.

40. */

41. public static void main(String[] args)

42. {

43. // Le compteur (sentinelle).

44. int compteur;

46. // Le résultat du produit.

47. int resultat = 1;

49. // Calcule le produit des entiers impairs de 1 à 15.

50. compteur = 1;

51. do

52. {

53. resultat *= compteur;

54. compteur += 2;

55. }

56. while(compteur <= 15);

58. // Affiche le résultat du produit des entiers impairs de 1 à 15.

59. JOptionPane.showMessageDialog(null, "Le produit des entiers impairs de 1 à 15 est : "

60. + resultat + ".");

62. // Termine l'application.

63. System.exit(0);

64. }

65. }

III - Vente d'articles

III-1 - Énoncé

Une entreprise de vente par correspondance vend 5 produits dont les prix sont les suivants :
- produit numéro 1 : 2.67€ ;
- produit numéro 2 : 9.65€ ;
- produit numéro 3 : 3.78€ ;
- produit numéro 4 : 5.26€ ;
- produit numéro 5 : 7.21€.
Écrivez une application qui lit une suite de paires de nombres (numéro du produit et quantité vendue dans la journée). Il faut utiliser une structure de contrôle switch pour déterminer le prix d'un produit. Ensuite calculez et affichez le détail des produits vendus en une semaine. Pour la saisie des données, utilisez un JTextField ; une boucle contrôlée par sentinelle permet d'afficher le résultat et d'arrêter le programme.

Classes de l'API utilisées :

- java.text.NumberFormat

- java.util.Locale

- javax.swing.JOptionPane

- javax.swing.JScrollPane

- javax.swing.JTextArea

III-2 - Aperçu

Aperçu du résultat.

III-3 - Démonstration

Lancer avec Java Web Start

Note : javaws -viewer (accessible aussi dans le panneau de configuration Java) permet de voir les différentes applications JWS en cache et de les gérer.

III-4 - Solution

Vente.java

1. /*

2. * Fichier: Vente.java

3. * Crée le: 03 décembre 2006.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre4;

27. import java.text.NumberFormat;

28. import java.util.Locale;

30. import javax.swing.JOptionPane;

31. import javax.swing.JScrollPane;

32. import javax.swing.JTextArea;

36. /**

37. * <p>Classe de simulation de vente d'articles.</p>

38. * @author Sébastien ESTIENNE.

39. */

40. public class Vente

41. {

42. /**

43. * <p>Lance la simulation de vente d'articles.</p>

44. * @param args Les paramètres de la ligne de commande.

45. */

46. public static void main(String[] args)

47. {

48. // Le numéro du produit entré par l'utilisateur.

49. String sNoProduit;

50. int noProduit = 0;

52. // La quantité du produit entré par l'utilisateur.

53. String sQuantite;

54. int quantite = 0;

56. // 1 produit * quantite.

57. double sousTotal;

59. // Le total des produits.

60. double total;

62. // Indique si la saisie de l'utilisateur est valide.

63. boolean saisieValide;

65. // Créer un JTextArea pour afficher les résultats.

66. JTextArea zoneSortie = new JTextArea(10, 28);

67. zoneSortie.setEditable(false);

69. // Relier le JTextArea à un JScrollPane pour que l'utilisateur puisse faire défiler

70. // les résultats.

71. JScrollPane defilant = new JScrollPane(zoneSortie);

73. // Le contenu du JTextArea.

74. StringBuilder sortie = new StringBuilder();

76. // Créer un decimalFormat pour mettre en forme les nombres à virgules flottantes avec

77. // deux chiffres à droite du point décimal et un signe $.

78. NumberFormat dollard = NumberFormat.getCurrencyInstance(Locale.FRANCE);

80. // Demander le numéro du produit à l'utilisateur.

81. do

82. {

83. sNoProduit = JOptionPane.showInputDialog("Entrez le numéro du produit[1-5] "

84. + "(0 pour terminer) :\n\n");

86. // Convertir sNoProduit de String en int.

87. try

88. {

89. noProduit = Integer.parseInt(sNoProduit);

90. saisieValide = true;

91. }

92. // La valeur saisie comme numéro de produit est invalide.

93. catch(NumberFormatException e)

94. {

95. saisieValide = false;

96. }

97. }

98. while(!saisieValide || noProduit < 0 || noProduit > 5);

100. // Continuer d'ajouter des produits tant que la valeur sentinelle n'est pas rentrée.

101. total = 0.0;

102. sortie.append("Produit\t Quantite\t Total\n");

103. while(noProduit != 0)

104. {

105. // Demander le numéro du produit à l'utilisateur.

106. do

107. {

108. sQuantite = JOptionPane.showInputDialog("Entrez la quantité du produit :\n\n");

110. // Convertir sNoProduit de String en int.

111. try

112. {

113. quantite = Integer.parseInt(sQuantite);

114. saisieValide = true;

115. }

116. // La valeur saisie comme quantité est invalide.

117. catch(NumberFormatException e)

118. {

119. saisieValide = false;

120. }

121. }

122. while(!saisieValide || quantite < 0);

124. // Calculer le sous total pour 1 produit donné.

125. switch(noProduit)

126. {

127. case 1:

128. sousTotal = 2.67 * quantite;

129. break;

130. case 2:

131. sousTotal = 9.65 * quantite;

132. break;

133. case 3:

134. sousTotal = 3.78 * quantite;

135. break;

136. case 4:

137. sousTotal = 5.26 * quantite;

138. break;

139. case 5:

140. sousTotal = 7.21 * quantite;

141. break;

142. default:

143. sousTotal = 0.0;

144. break;

145. }

147. // Calcul du montant total.

148. total += sousTotal;

150. // Pour ne pas afficher les produits non valides.

151. if(noProduit > 0 && noProduit < 6)

152. {

153. sortie.append(noProduit).append("\t ").append(quantite).append("\t ").append(

154. dollard.format(sousTotal)).append("\n");

155. }

157. // Demander le numéro du produit à l'utilisateur.

158. do

159. {

160. sNoProduit = JOptionPane.showInputDialog("Entrez le numéro du produit[1-5] "

161. + "(0 pour terminer) :\n\n");

163. // Convertir sNoProduit de String en int.

164. try

165. {

166. noProduit = Integer.parseInt(sNoProduit);

167. saisieValide = true;

168. }

169. // La valeur saisie comme numéro de produit est invalide.

170. catch(NumberFormatException e)

171. {

172. saisieValide = false;

173. }

174. }

175. while(!saisieValide || noProduit < 0 || noProduit > 5);

176. }

178. // Ajouter le total à la chaine de sortie.

179. sortie.append("\nTOTAL : ").append(dollard.format(total));

181. // Placer les résultats dans un JTextArea.

182. zoneSortie.setText(sortie.toString());

184. // Afficher le contenu de la sortie dans le JTextArea avec la barre de défilement.

185. JOptionPane.showMessageDialog(null, defilant, "Vente", JOptionPane.INFORMATION_MESSAGE);

187. // Terminer l'application.

188. System.exit(0);

189. }

190. }

IV - Pythagore

IV-1 - Énoncé

Un triangle rectangle est un triangle dont la somme des carrés de deux côtés est égale au carré du troisième côté appelé alors hypoténuse (Théorème de Pythagore).
Écrire une application qui trouve tous les triangles rectangles dont les côtés sont tous inférieurs à 500. On utilisera des valeurs entières pour les côtés du triangle. Pour faire cela, utilisez une boucle for imbriquée sur trois niveaux afin de tester toutes les possibilités. C'est ce qu'on appelle une méthode de calcul par « force brute » (brute force).

Classes de l'API utilisées :

- javax.swing.JOptionPane

- javax.swing.JScrollPane

- javax.swing.JTextArea

IV-2 - Aperçu

Aperçu du résultat.

IV-3 - Démonstration

Lancer avec Java Web Start

Note : javaws -viewer (accessible aussi dans le panneau de configuration Java) permet de voir les différentes applications JWS en cache et de les gérer.

IV-4 - Solution

Pythagore.java

1. /*

2. * Fichier: Pythagore.java

3. * Crée le: 03 décembre 2006.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre4;

27. import javax.swing.JOptionPane;

28. import javax.swing.JScrollPane;

29. import javax.swing.JTextArea;

33. /**

34. * <p>Calcule le produit des entiers impairs de 1 à 15.</p>

35. * @author Sébastien ESTIENNE.

36. */

37. public class Pythagore

38. {

39. /**

40. * <p>Trouve tous les triangles droits dont les côtés sont tous inférieurs à 500.</p>

41. * @param args Les paramètres de la ligne de commande.

42. */

43. public static void main(String[] args)

44. {

45. // Créer un JTextArea pour afficher les résultats.

46. JTextArea zoneSortie = new JTextArea(10, 28);

47. zoneSortie.setEditable(false);

49. // Relier le JTextArea à un JScrollPane pour que l'utilisateur puisse faire défiler

50. // les résultats.

51. JScrollPane defilant = new JScrollPane(zoneSortie);

53. // Le contenu du JTextArea.

54. StringBuilder sortie = new StringBuilder();

56. // Initialisation de la chaine de sortie.

57. sortie.append("Côté 1\tCôté 2\tHypoténuse\n");

59. // Méthode par force brute sur la base de c1*c1+c2*c2=h*h.

60. // Deuxième for jusqu'à cote2 pour éviter des doublets.

61. for(int cote1 = 1; cote1 < 500; cote1++)

62. {

63. for(int cote2 = 1; cote2 <= cote1; cote2++)

64. {

65. for(int hypotenuse = cote1; hypotenuse < 500; hypotenuse++)

66. {

67. if(cote1 * cote1 + cote2 * cote2 == hypotenuse * hypotenuse)

68. {

69. sortie.append(cote1).append("\t").append(cote2).append("\t").append(hypotenuse)

70. .append("\n");

71. }

72. }

73. }

74. }

76. // Placer les résultats dans un JTextArea.

77. zoneSortie.setText(sortie.toString());

79. // Afficher le contenu de la sortie dans le JTextArea avec la barre de défilement.

80. JOptionPane.showMessageDialog(null, defilant, "Pythagore", JOptionPane.INFORMATION_MESSAGE);

82. // Termine l'application.

83. System.exit(0);

84. }

85. }

V - Remerciements

Je tiens à remercier Ricky81, Alp pour les conseils, remarques et relectures.
Je remercie aussi www.developpez.com me permettant de publier cet article et Nono40 pour ses outils.