Licence CC BY-NC-SA

TP : conversion Celsius - Fahrenheit

Ce contenu est obsolète. Il peut contenir des informations intéressantes mais soyez prudent avec celles-ci.

Voilà un petit TP qui va vous permettre de mettre en œuvre toutes les notions que vous avez vues jusqu'ici :

  • les variables ;
  • les conditions ;
  • les boucles ;
  • votre génial cerveau.

Accrochez-vous, car je vais vous demander de penser à des tonnes de choses, et vous serez tout seuls. Lâchés dans la nature… Mais non je plaisante, je vais vous guider un peu. ;)

Élaboration

Voici les caractéristiques du programme que nous allons devoir réaliser :

  • le programme demande quelle conversion nous souhaitons effectuer, Celsius vers Fahrenheit ou l'inverse ;
  • on n'autorise que les modes de conversion définis dans le programme (un simple contrôle sur la saisie fera l'affaire) ;
  • enfin, on demande à la fin à l'utilisateur s'il veut faire une nouvelle conversion, ce qui signifie que l'on doit pouvoir revenir au début du programme !

Avant de vous lancer dans la programmation à proprement parler, je vous conseille fortement de réfléchir à votre code… sur papier. Réfléchissez à 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.

À toutes fins utiles, voici la formule de conversion pour passer des degrés Celsius en degrés Fahrenheit : $F = \frac{9}{5} \times C + 32$ ; pour l'opération inverse, c'est comme ceci : $C = \frac{(F - 32) \times 5 }{9}$.

La figure suivante est un aperçu de ce que je vous demande :

Rendu du TP

Je vais également vous donner une fonction toute faite qui vous permettra éventuellement d'arrondir vos résultats. Je vous expliquerai le fonctionnement des fonctions dans deux chapitres. Vous pouvez très bien ne pas vous en servir. Pour ceux qui souhaitent tout de même l'utiliser, la voici :

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 à la figure suivante :

Emplacement de la fonction

Voici comment utiliser cette fonction : imaginez que vous avez la variable faren à arrondir, et que le résultat obtenu est enregistré dans une variable arrondFaren ; vous procéderez comme suit :

1
2
arrondFaren = arrondi(faren,1); //Pour un chiffre après la virgule
arrondFaren = arrondi(faren, 2);//Pour deux chiffres après la virgule, etc.

Quelques dernières recommandations : essayez de bien indenter votre code ! Prenez votre temps. Essayez de penser à tous les cas de figure. Maintenant à vos papiers, crayons, neurones, claviers… et bon courage !

Correction

STOP ! C'est fini ! Il est temps de passer à 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 vidés. Mais vous allez voir qu'en définitive, ce TP n'était pas si compliqué que ça.

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

 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
import java.util.Scanner;

class Sdz1 {
  public static void main(String[] args) {
    //Notre objet Scanner
    Scanner sc = new Scanner(System.in);

    //initialisation des variables
    double aConvertir, convertit=0;
    char reponse=' ', mode = ' ';

    System.out.println("CONVERTISSEUR DEGRÉS CELSIUS ET DEGRÉS FAHRENHEIT");
    System.out.println("-------------------------------------------------");

    do{//tant que reponse = O //boucle principale

      do{//tant que reponse n'est pas O ou N
        mode = ' ';
        System.out.println("Choisissez le mode de conversion : ");
        System.out.println("1 - Convertisseur Celsius - Fahrenheit");
        System.out.println("2 - Convertisseur Fahrenheit - Celsius ");
        mode = sc.nextLine().charAt(0);

        if(mode != '1' && mode != '2')
          System.out.println("Mode inconnu, veuillez réitérer votre choix.");

      }while (mode != '1' && mode != '2');

      //saisie de la température à convertir
      System.out.println("Température à convertir :");
      aConvertir = sc.nextDouble();
      //Pensez à vider la ligne lue
      sc.nextLine();

      //Selon le mode, on calcule différemment et on affiche le résultat
      if(mode == '1'){
        convertit = ((9.0/5.0) * aConvertir) + 32.0;
        System.out.print(aConvertir + " °C correspond à : ");
        System.out.println(arrondi(convertit, 2) + " °F.");
      }
      else{
        convertit = ((aConvertir - 32) * 5) / 9;
        System.out.print(aConvertir + " °F correspond à : ");
        System.out.println(arrondi(convertit, 2) + " °C.");
      }

      //On invite l'utilisateur à recommencer ou à quitter
      do{       
        System.out.println("Souhaitez-vous convertir une autre température ?(O/N)");
        reponse = sc.nextLine().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);
  } 
}

Explications concernant ce code

  • Tout programme commence par une phase de déclaration des variables.
  • Nous affichons le titre de notre programme.
  • Ensuite, vous voyez deux do{ consécutifs correspondant à deux conditions à vérifier :
    • la volonté de l'utilisateur d'effectuer une nouvelle conversion ;
    • la vérification du mode de conversion.
  • Nous affichons les renseignements à l'écran, et récupérons la température à convertir pour la stocker dans une variable.
  • Selon le mode sélectionné, on convertit la température et on affiche le résultat.
  • On invite l'utilisateur à recommencer.
  • 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 !