Voilà un très bon petit TP qui va mettre en oeuvre tout ce
que vous avez vu jusqu'ici. Mais vraiment tout !
Accrochez-vous, car là je vais vous demander de penser à des tonnes de choses, et vous serez tout seuls. Lâchés dans la nature... non, je plaisante. Oui, je sais, je déconne beaucoup, tout de même !
Mais je pense que nous apprendrons mieux dans la bonne humeur.
Bon : trêve de bavardage, au boulot.
Accrochez-vous, car là je vais vous demander de penser à des tonnes de choses, et vous serez tout seuls. Lâchés dans la nature... non, je plaisante. Oui, je sais, je déconne beaucoup, tout de même !
Mais je pense que nous apprendrons mieux dans la bonne humeur.
Bon : trêve de bavardage, au boulot.
Sommaire du chapitre :
- Élaboration
- Conception
- Correction
Élaboration
Euh... Avant de foncer têtes
baissées sur Eclipse, et commencer à coder, nous allons d'abord essayer de
structurer notre futur programme. En plus, je ne vous ai même pas dit ce que
j'attendais de vous...
Cahier des charges
Alors je veux :
- un code qui puisse se répéter autant de fois que nous le souhaitons
- que le code demande à quelle température nous commençons la conversion
- la température de fin de conversion
- le pas de conversion => c'est-à-dire par degré, ou tous les 2 degrés, ou les x degrés
- qu'on vérifie les cas impossibles : comme un pas plus grand que l'intervalle de température, ou une température d'arrivée plus petite que la température de départ
- qu'on demande à l'utilisateur s'il est prêt, ou si son imprimante est prête... enfin ce que vous voulez, ici
- s'il est prêt, que l'on affiche les conversions sous forme de tableau visuel
- qu'il n'y ait pas de décalage pour les différentes valeurs => tout doit être parfaitement aligné
- enfin, que l'on demande à l'utilisateur s'il veut faire une nouvelle conversion, donc revenir au début, s'il le souhaite !
Je vous avais prévenus que je serais exigeant ! Mais croyez-moi, vous êtes capables de le faire.
Je sais que vous y arriverez !
Élaboration
Comme je vous l'ai dit, essayez de réfléchir sur papier avant... Ce qu'il vous faut comme nombre de variables, les types de variables, comment va se dérouler le programme, les conditions et les boucles utilisées...
Pour info, voici la formule de conversion pour passer des degrés Celsius en degrés Fahrenheit :
F = 9/5 * C + 32
Je vais vous aiguiller un peu :
- pour ce genre de calcul, utilisez des variables de type double
- faites attention à la priorité des opérations
- de simples if... else suffisent ici : pas besoin d'un switch.
Voici un aperçu de ce que je vous demande :
Vous voyez bien que tous mes chiffres sont alignés, malgré leur taille. Lors de l'affichage, il faudra donc utiliser une condition en fonction de la taille des chiffres (if Celsius < 100){.........} else{.........}).
Je vais également vous donner une fonction toute faite, qui vous permettra d'arrondir vos résultats. Je vous expliquerai le fonctionnement des fonctions exactement 2 chapitres plus loin. Mais en attendant, c'est facultatif. Vous pouvez très bien ne pas vous en servir. Pour ceux qui souhaitent tout de même l'utiliser, la voici :
Code : Java -
1 2 3 |
public static double arrondi(double A, int B) { return (double) ( (int) (A * Math.pow(10, B) + .5)) / Math.pow(10, B);
}
|
Elle est à placer entre les deux accolades fermantes de votre classe, comme ceci :
Vous pouvez l'utiliser de cette manière : imaginez que vous avez la variable fahren à arrondir, et que le résultat obtenu soit enregistré dans une variable arrondFahren, vous procéderez comme suit :
Code : Java -
1 2 |
arrondFahren = arrondi(fahren, 1); // pour un chiffre après la virgule arrondFahren = arrondi(fahren, 2);// pour 2 chiffres après la virgule... etc. |
Bon : Je vous ai déjà assez aidés ! Place à la conception.
Conception
Dernière recommandation
Essayez de bien INDENTER votre code ! Prenez votre temps. Essayez de penser à tous les cas de figures...
Maintenant à vos papiers, crayons, neurones et claviers, ...et bon courage !
Correction
STOP !!! C'est fini ! Passons maintenant
à la correction de ce premier TP.
Ça va ? Pas trop mal à la tête ? Je me doute qu'il a dû y avoir quelques tubes d'aspirine d'utilisés...
Mais vous allez voir qu'en définitive, ce TP n'était pas si compliqué.
Surtout, n'allez pas croire que ma correction est parole d'évangile... Il y avait différentes manières d'obtenir le même résultat. Voici tout de même une des corrections possibles.
Code : Java -
Ça va ? Pas trop mal à la tête ? Je me doute qu'il a dû y avoir quelques tubes d'aspirine d'utilisés...
Mais vous allez voir qu'en définitive, ce TP n'était pas si compliqué.
Surtout, n'allez pas croire que ma correction est parole d'évangile... Il y avait différentes manières d'obtenir le même résultat. Voici tout de même une des corrections possibles.
Code : Java -
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
class Sdz1 { public static void main(String[] args) {
//Notre objet Scanner Scanner sc = new Scanner(System.in); //initialisation des variables
double c, f=0; int i,j=0; char reponse=' ';
System.out.println(" ------------------------------------------------------------------------"); System.out.println("| CONVERSION DEGRES CELSIUS ET DEGRES FAHRENHEIT |"); System.out.println(" ------------------------------------------------------------------------"); do{//tant que reponse = O//boucle principale do{//tant que l'imprimante n'est pas prête//boucle de test pour savoir si l'utilisateur est prêt do {// tant que valeur impossible rentrée //saisie des valeurs
System.out.println("A partir de :");//affichage des directives et récupération des données c = sc.nextDouble(); System.out.println("jusqu' à:"); i = sc.nextInt(); System.out.println("Par pas de :"); j = sc.nextInt();
if (c > i || j > i || j == 0)
System.out.println("Traitement impossible"); }while(c > i || j > i || j == 0);
do {//tant que la reponse n'est pas O ou N System.out.println("Assurez-vous que l'imprimante est prête"); System.out.println("Si vous êtes prêt, tapez O, sinon tapez N"); //sc.reset(); reponse = sc.next().charAt(0);
}while (reponse != 'O' && reponse != 'N');
}while (reponse == 'N'); // Traitement des valeurs
System.out.println("TABLE DE CONVERSION CELSIUS / FAHRENHEIT"); System.out.println("---------------------------------------------"); System.out.println(" Celsius | Fahrenheit "); System.out.println("---------------------------------------------"); do{//tant que l'affichage n'est pas fini, on boucle les données et les calculs f = ((9.0/5.0) * c) + 32.0; if (c < 10)//si le Celsius n'a qu'un chiffre, on affiche un certain nombre d'espaces System.out.println(" "+c+" | "+arrondi(f,1));
else
{ if(c < 100)//S'il y a un chiffre en plus, on enlève un espace blanc... System.out.println(" "+c+" | "+arrondi(f,1)); else
System.out.println(" "+c+" | "+arrondi(f,1)); }
c = c + j;//On incrémente le degré Celsius avec le pas }while (c <= i); do{ System.out.println("Souhaitez-vous éditer une autre table ?(O/N)"); reponse = sc.next().charAt(0);
}while(reponse != 'O' && reponse != 'N');
}while(reponse == 'O');
System.out.println("Au revoir !"); //Fin de programme
}
public static double arrondi(double A, int B) { return (double) ( (int) (A * Math.pow(10, B) + .5)) / Math.pow(10, B); }
}
|
Expliquons un peu ce code
- Tout programme commence par une phase de déclaration de variable.
- Nous affichons le titre de notre programme.
- Ensuite, vous voyez 3 do{ consécutifs, correspondant chacun à une condition à vérifier : le choix de l'utilisateur pour faire une nouvelle conversion, vérification si l'utilisateur est prêt, vérification si les nombres sont cohérents.
- Nous affichons les renseignements à l'écran, et nous récupérons les saisies clavier dans une variable.
- Si les chiffres sont incohérents, on affiche une erreur, et on boucle sur le début.
- Une boucle pour s'assurer que l'utilisateur rentre bien O ou N.
- À partir d'ici, les nombres sont cohérents, et l'utilisateur est prêt. Donc on lance la conversion.
- On affiche le squelette du tableau.
- Une boucle pour afficher les différents résultats.
- Calcul de la conversion.
- Selon la taille du chiffre Celsius, on enlève (ou non) un espace à l'affichage.
- Cette boucle sera répétée tant que le degré de départ est plus petit que le degré de fin que vous avez choisi.
- FIN DU PROGRAMME !
Ce programme n'est pas parfait, loin de là... La vocation de celui-ci était de vous faire utiliser ce que vous avez appris et je pense qu'il remplit bien sa fonction.
J'espère que vous avez apprécié ce TP.
Je sais qu'il n'était pas facile, mais avouez-le : il vous a bien fait utiliser tout ce que vous avez vu jusqu'ici !
Voilà : votre premier TP est fait, et bien fait !!
Je vous conseille de vous reposer un peu, parce que ça a dû fumer dans votre boite crânienne...
Je viens de vous faire afficher un tableau (rudimentaire à l'affichage), mais maintenant nous allons travailler avec des tableaux en Java ! C'est parti...
Je vous conseille de vous reposer un peu, parce que ça a dû fumer dans votre boite crânienne...
Je viens de vous faire afficher un tableau (rudimentaire à l'affichage), mais maintenant nous allons travailler avec des tableaux en Java ! C'est parti...
// //
2
comments
//
2 comments to "TP01 : un tableau de conversion Celsius - Fahrenheit !"
haythem says:
Math.pow(10, B) + .5) quelqu’un nous explique cela !! surtout ce .5
Merci !!
rmouniak says:
This blog gives very important info about Tableau Thanks for sharing
Tableau Online Training