TP01 : un tableau de conversion Celsius - Fahrenheit !





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 -
 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...



2 comments to "TP01 : un tableau de conversion Celsius - Fahrenheit !"

Post a Comment

About This Blog

Aller au debut de la page