Exercices en Java (03-Structures de contrôle (partie1))
Ce troisième chapitre concerne la première partie des structures de contrôle : if/else et while.
Le premier exercice concerne la gestion de clients. Le deuxième exercice trouve le maximum parmi une série de nombres. Le troisième exercice indique si un nombre de 5 chiffres est un palindrome ou non. Le quatrième exercice est un programme de cryptage de nombres à 4 chiffres. Le cinquième exercice est le programme de décryptage correspondant à l'exercice 4.
Les principales notions abordées sont les suivantes :
Structures de sélection if/else ;
Structures de contrôle while ;
Structures de contrôle avec compteur et avec sentinelle ;
Opérateur d'incrémentation et de décrémentation.
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/Cours en Java
Écrire une application qui vérifie si un client (d'un magasin) a dépassé sa limite de crédit sur son compte débiteur. Pour chaque client, vous avez les données suivantes :
- le numéro de compte ;
- le solde au début du mois ;
- le total des articles portés en compte de ce client ce mois-ci ;
- le total de tous les crédits appliqués au compte de ce client ce mois-ci ;
- la limite de crédit autorisée.
L'utilisateur doit pouvoir saisir chaque donnée sous forme d'entiers dans des boites de dialogue d'entrée, calculer le nouveau solde (solde début - débits + crédits), afficher le nouveau solde et déterminer si le nouveau solde dépasse la limite de crédit du client (dans ce cas, il faut afficher le message « Limite de crédit dépassée »).
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.
/* * Fichier: Client.java * Crée le: 03 décembre 2006. * Modifié: 7 juillet 2007. * Auteurs: Sébastien ESTIENNE. * SiteWeb: http://www.prog-info.org/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */package chapitre3;
import javax.swing.JOptionPane;
/** * <p>Gestion de comptes clients dans un magasin.</p> * @author Sébastien ESTIENNE. */publicclass Client
{/** * <p>Débute l'exécution de l'application.</p> * @param argsLes paramètres de la ligne de commande. */publicstaticvoidmain(String[] args)
{// Entrées de l'utilisateur:// Le numéro du compte.
String sNoCompte ="";
// Le solde au début du mois.
String sSolde ="";
// Le total des articles portés en compte de ce client ce mois-ci.
String sDebits ="";
// Le total de tous les crédits appliqués au compte de ce client ce mois-ci.
String sCredits ="";
// La limite de crédit autorisée.
String sLimite ="";
// Données entrées par l'utilisateur converties.int noCompte =-1;
double solde =0, debits =0, credits =0, limite =0;
// Chaine de caractères pour l'affichage du nouveau solde.
String sortie ="";
// Demander à l'utilisateur le numéro du compte.
sNoCompte = JOptionPane.showInputDialog("Entrez le numéro du compte (-1 "+"pour terminer) :\n\n");
// Convertir le numéro du compte de String en entier.try{
noCompte = Integer.parseInt(sNoCompte);
}// Si la valeur n'est pas un nombre entier, cela génère une exception qui implique un// traitement particulier.catch(NumberFormatException e)
{
JOptionPane.showMessageDialog(null,
"La valeur saisie est incorrecte, l'application va se terminer.", "Erreur",
JOptionPane.ERROR_MESSAGE);
noCompte =-1;
}while(noCompte !=-1)
{// Demander à l'utilisateur le Solde, les Débits, les Crédits, la Limite du compte.
sSolde = JOptionPane.showInputDialog("Entrez le solde au début du mois :\n\n");
sDebits = JOptionPane.showInputDialog("Entrez le total des articles portés en "+"compte ce mois :\n\n");
sCredits = JOptionPane.showInputDialog("Entrez le total des crédits appliqués "+"au compte ce mois :\n\n");
sLimite = JOptionPane.showInputDialog("Entrez la limite de crédit autorisée "+":\n\n");
// Convertir le Solde, les Débits, les Crédits, la Limite du compte de String en double.try{
solde = Double.parseDouble(sSolde);
debits = Double.parseDouble(sDebits);
credits = Double.parseDouble(sCredits);
limite = Double.parseDouble(sLimite);
}// Si une des valeurs n'est pas un nombre, cela génère une exception qui implique un// traitement particulier.catch(NumberFormatException e)
{
JOptionPane.showMessageDialog(null,
"Au moins une des valeurs saisies est incorrecte.\n"+"Ces valeurs seront initialisées à 0.", "Erreur",
JOptionPane.ERROR_MESSAGE);
noCompte =-1;
}// Calculer la valeur du nouveau solde du mois.
solde = solde - debits + credits;
// Mettre à jour la chaine de sortie.
sortie ="Le nouveau solde du compte numéro "+ noCompte +" est : "+ solde +".\n";
// Vérifier si la limite de crédit a été dépassée.if(solde + limite <0)
{// On modifie la chaine de sortie.
sortie +="La limite de crédit est dépassée.";
}// Afficher le nouveau solde du compte pour ce mois.
JOptionPane.showMessageDialog(null, sortie, "Solde du mois",
JOptionPane.INFORMATION_MESSAGE);
// Demander à l'utilisateur le numéro du compte.
sNoCompte = JOptionPane.showInputDialog("Entrez le numéro du compte (-1 "+"pour terminer) :\n\n");
// Convertir le numéro du compte de String en entier.try{
noCompte = Integer.parseInt(sNoCompte);
}// Si la valeur n'est pas un nombre entier, cela génère une exception qui implique un// traitement particulier.catch(NumberFormatException e)
{
JOptionPane.showMessageDialog(null,
"La valeur saisie est incorrecte, l'application va se terminer.", "Erreur",
JOptionPane.ERROR_MESSAGE);
noCompte =-1;
}}// Terminer l'application.
System.exit(0);
}}
Écrire une application qui demande une suite de 10 nombres à un seul chiffre (sous la forme de caractères) puis détermine et affiche le plus grand de ces nombres.
Astuce : utilisez trois variables :
- compteur : qui compte jusqu'à 10 ;
- nombre : le chiffre courant ;
- plusGrand : le plus grand nombre connu jusqu'ici.
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.
/* * Fichier: Maximum.java * Crée le: 03 décembre 2006. * Modifié: 7 juillet 2007. * Auteurs: Sébastien ESTIENNE. * SiteWeb: http://www.prog-info.org/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */package chapitre3;
import javax.swing.JOptionPane;
/** * <p>Calcule le chiffre maximum d'une série de 10 chiffres.</p> * @author Sébastien ESTIENNE. */publicclass Maximum
{/** * <p>Débute l'exécution de l'application.</p> * @param argsLes paramètres de la ligne de commande. */publicstaticvoidmain(String[] args)
{// Le compteur.int compteur =1;
// Le nombre saisi par l'utilisateur.long nombre =0;
// Le chiffre maximum.int plusGrand =0;
// Demander à l'utilisateur les 10 nombres à 1 chiffre.try{
nombre = Long.parseLong(JOptionPane.showInputDialog("Entrez les 10 nombres "+"à 1 chiffre :\n\n"));
}// Si la valeur n'est pas un nombre entier, cela génère une exception qui implique un// traitement particulier.catch(NumberFormatException e)
{
JOptionPane.showMessageDialog(null,
"La valeur saisie est incorrecte, l'application va se terminer.", "Erreur",
JOptionPane.ERROR_MESSAGE);
// Termine l'application.
System.exit(0);
}while(compteur <=10)
{// Tester si le chiffre courant est plus grand.if(nombre %10> plusGrand)
{
plusGrand =(int) (nombre %10);
}// Permet de passer au chiffre suivant.
nombre /=10;
// Indique q'un nombre de plus vient d'être traité.
compteur++;
}// Afficher le chiffre maximum.
JOptionPane.showMessageDialog(null, "Le plus grand nombre à un chiffre est : "+ plusGrand
+".", "Maximum", JOptionPane.INFORMATION_MESSAGE);
// Termine l'application.
System.exit(0);
}}
Un palindrome est un nombre, un mot ou une phrase qui se lit de façon identique dans un sens et dans l'autre.
Exemple de nombres qui sont des palindromes : 45654, 77777, 11511.
Écrivez une application qui demande un entier de 5 chiffres et détermine si c'est un palindrome. Si le nombre ne comporte pas 5 chiffres affichez dans une boite de message une erreur. Si l'utilisateur annule la boite de message, permettez-lui d'entrer une nouvelle valeur.
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.
/* * Fichier: Palindrome.java * Crée le: 03 décembre 2006. * Modifié: 7 juillet 2007. * Auteurs: Sébastien ESTIENNE. * SiteWeb: http://www.prog-info.org/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */package chapitre3;
import javax.swing.JOptionPane;
/** * <p>Indique si un nombre à 5 chiffres est un palindrome.</p> * @author Sébastien ESTIENNE. */publicclass Palindrome
{/** * <p>Débute l'exécution de l'application.</p> * @param argsLes paramètres de la ligne de commande. */publicstaticvoidmain(String[] args)
{// Le nombre entré par l'utilisateur.
String sNombre ="";
// Le nombre converti.int nombre =-1;
do{// Demander à l'utilisateur le nombre à 5 chiffres.
sNombre = JOptionPane.showInputDialog("Entrez un nombre de 5 chiffres :\n\n");
// Convertir sNombre de String en int.try{
nombre = Integer.parseInt(sNombre);
}// Si la valeur n'est pas un nombre entier, cela génère une exception qui implique un// traitement particulier.catch(NumberFormatException e)
{// Ne rien faire.}}while(sNombre ==null|| sNombre.length() !=5|| nombre ==-1);
// Vérifier si le nombre est un palindrome (xyzyx)if(nombre /10000== nombre %10&& nombre /1000%10== nombre /10%10)
{// Afficher que le nombre est un palindrome.
JOptionPane.showMessageDialog(null, nombre +" est un palindrome.", "Palindrome",
JOptionPane.INFORMATION_MESSAGE);
}else{// Afficher que le nombre n'est pas un palindrome.
JOptionPane.showMessageDialog(null, nombre +" n'est pas un palindrome.", "Palindrome",
JOptionPane.INFORMATION_MESSAGE);
}// Termine l'application.
System.exit(0);
}}
Écrire un programme qui crypte les données introduites par l'utilisateur dans une boite de dialogue d'entrée. Les données sont sous forme d'entiers de 4 chiffres.
Algorithme de cryptage : remplacer chaque chiffre par (la somme de ce chiffre et de 7) modulo 10; ensuite il faut permuter le premier chiffre et le troisième ainsi que le deuxième et le quatrième.
Affichez le résultat dans une boite de dialogue.
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.
/* * Fichier: Cryptage.java * Crée le: 03 décembre 2006. * Modifié: 7 juillet 2007. * Auteurs: Sébastien ESTIENNE. * SiteWeb: http://www.prog-info.org/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */package chapitre3;
import java.text.DecimalFormat;
import javax.swing.JOptionPane;
/** * <p>Crypte un nombre saisi par l'utilisateur.</p> * @author Sébastien ESTIENNE. */publicclass Cryptage
{/** * <p>Débute l'exécution de l'application.</p> * @param argsLes paramètres de la ligne de commande. */publicstaticvoidmain(String[] args)
{// Nombre entré par l'utilisateur.
String sNombre ="";
// Nombre converti.int nombre =-1;
// Les différents chiffres du nombre.int chiffre1, chiffre2, chiffre3, chiffre4;
// Le nombre crypté.int code;
// Sert à afficher les nombres sur 4 chiffres.
DecimalFormat quatreChiffres =newDecimalFormat("0000");
do{// Demander à l'utilisateur le code à 4 chiffres.
sNombre = JOptionPane.showInputDialog("Entrez un nombre de 4 chiffres :\n\n");
// Convertir sNombre de String en int.try{
nombre = Integer.parseInt(sNombre);
}// Si la valeur n'est pas un nombre entier, cela génère une exception qui implique un// traitement particulier.catch(NumberFormatException e)
{// Ne rien faire.}}while(sNombre ==null|| sNombre.length() !=4|| nombre ==-1);
// Récupérer les 4 chiffres du nombre dans les différentes variables.
chiffre1 = nombre /1000;
chiffre2 = nombre /100%10;
chiffre3 = nombre /10%10;
chiffre4 = nombre %10;
// Appliquer la première partie du cryptage ( c = (c + 7) % 10 ).
chiffre1 =(chiffre1 +7) %10;
chiffre2 =(chiffre2 +7) %10;
chiffre3 =(chiffre3 +7) %10;
chiffre4 =(chiffre4 +7) %10;
// Appliquer la première partie du cryptage : inverser les chiffres 1, 3 et 2, 4 du nombre.
code = chiffre3 *1000+ chiffre4 *100+ chiffre1 *10+ chiffre2;
// Afficher le résultat du cryptage.
JOptionPane.showMessageDialog(null, "Le nombre "+ quatreChiffres.format(nombre)
+" crypté donne "+ quatreChiffres.format(code), "Cryptage",
JOptionPane.INFORMATION_MESSAGE);
// Terminer l'application.
System.exit(0);
}}
Écrire un programme qui décrypte les données introduites par l'utilisateur dans une boite de dialogue d'entrée. Les données sont sous forme d'entiers de 4 chiffres.
Algorithme de cryptage : remplacer chaque chiffre par (la somme de ce chiffre et de 7) modulo 10; ensuite il faut permuter le premier chiffre et le troisième ainsi que le deuxième et le quatrième. À vous de trouver l'algorithme de décryptage…
Affichez le résultat dans une boite de dialogue.
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.
/* * Fichier: Decryptage.java * Crée le: 03 décembre 2006. * Modifié: 7 juillet 2007. * Auteurs: Sébastien ESTIENNE. * SiteWeb: http://www.prog-info.org/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */package chapitre3;
import java.text.DecimalFormat;
import javax.swing.JOptionPane;
/** * <p>Décrypte un nombre saisi par l'utilisateur.</p> * @author Sébastien ESTIENNE. */publicclass Decryptage
{/** * <p>Débute l'exécution de l'application.</p> * @param argsLes paramètres de la ligne de commande. */publicstaticvoidmain(String[] args)
{// Le code entré par l'utilisateur.
String sCode ="";
// Le code converti.int code =-1;
// Les différents chiffres du nombre.int chiffre1, chiffre2, chiffre3, chiffre4;
// Le code décrypté.int nombre;
// Sert à afficher les nombres sur 4 chiffres.
DecimalFormat quatreChiffres =newDecimalFormat("0000");
do{// Demander à l'utilisateur le code à 4 chiffres.
sCode = JOptionPane.showInputDialog("Entrez un nombre de 4 chiffres :\n\n");
// Convertir sNombre de String en int.try{
code = Integer.parseInt(sCode);
}// Si la valeur n'est pas un nombre entier, cela génère une exception qui implique un// traitement particulier.catch(NumberFormatException e)
{// Ne rien faire.}}while(sCode ==null|| sCode.length() !=4|| code ==-1);
// Récupérer les 4 chiffres du nombre dans les différentes variables.
chiffre1 = code /1000;
chiffre2 = code /100%10;
chiffre3 = code /10%10;
chiffre4 = code %10;
// Appliquer la première partie du décryptage ( c = (c + 3) % 10 ).
chiffre1 =(chiffre1 +3) %10;
chiffre2 =(chiffre2 +3) %10;
chiffre3 =(chiffre3 +3) %10;
chiffre4 =(chiffre4 +3) %10;
// Appliquer la première partie du décryptage : inverser les chiffres 1, 3 et 2, 4 du code.
nombre = chiffre3 *1000+ chiffre4 *100+ chiffre1 *10+ chiffre2;
// Afficher le résultat du décryptage.
JOptionPane.showMessageDialog(null, "Le nombre "+ quatreChiffres.format(code)
+" décrypté donne "+ quatreChiffres.format(nombre), "Décryptage",
JOptionPane.INFORMATION_MESSAGE);
// Terminer l'application.
System.exit(0);
}}
Je tiens à remercier Ricky81, wichtounet, guiblan pour les conseils, remarques et relectures.
Je remercie aussi www.developpez.com me permettant de publier cet article et Nono40 pour ses outils.
Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants :