2 votes

Laquelle est la meilleure approche, le cas échéant ?

J'essaie d'apprendre le langage C. Dans le livre sur le langage de programmation C, l'un des exercices consiste à faire un convertisseur de Fahrenheit en Celsius.

mon code suivant le style et les instructions du livre est le suivant :

#include <stdio.h>
int main() {
   float fhr;
   for (fhr = 0; fhr <= 300; fhr += 20)
      printf("%3.1f %6.1f\n", fhr, (5.0/9.0)*(fhr-32));
}

C'est écrit dans le livre : enter image description here

Je veux juste savoir si créer une variable Celsius et l'appeler ensuite dans la fonction printf en tant qu'argument est mieux ou si le faire de cette façon est mieux, à la fois du point de vue de la lisibilité humaine et du point de vue de l'environnement. plus important encore, si cela fait une différence pour le compilateur (C'est-à-dire qu'elle rend le programme plus rapide ou plus lent).

Merci.

4voto

sebastian Points 432

Créer une variable et la passer ensuite au printf améliorerait sûrement la lisibilité.

Du point de vue du compilateur, il n'y a pas de différence réelle. Cela n'affecte en rien les performances d'exécution. Cela est particulièrement vrai en ce qui concerne les optimisations internes que le compilateur effectue.

3voto

joshmeranda Points 1824

Du point de vue du compilateur, cela a potentiellement un impact. Selon le compilateur, il peut voir que la variable n'est utilisée qu'une seule fois et "mettre en ligne" la valeur de toute façon. Beaucoup peuvent ne pas le faire, ce qui aurait un impact sur les performances globales. Cela dit, l'impact sur les performances serait sans conséquence.

Pour ce qui est de la lisibilité, le fait de le stocker en tant que variable propre serait plus facile à consulter et à maintenir ultérieurement. Bien que pour un petit programme comme celui-ci, la différence soit également sans importance, elle pourrait commencer à faire une différence dans les programmes plus importants, surtout si la valeur est utilisée plus d'une fois.

#include <stdio.h>
int main()
{
   float fhr;
   for (fhr = 0; fhr <= 300; fhr += 20)
   {
      float celsius = (5.0/9.0)*(fhr-32);

      printf("%3.1f %6.1f\n", fhr, celsius);
   }
}

Vous pouvez également envisager d'utiliser une fonction, afin d'abstraire la façon dont cette valeur est déterminée. Encore une fois, cela nuit aux performances et n'est pas nécessaire pour un si petit programme, mais cela permettrait d'accéder à un moyen de déterminer la valeur à partir de plus d'endroits dans le programme. Cela signifierait que vous n'auriez pas besoin de faire circuler la valeur, ou d'avoir la variable dans la portée :

float fahrenheit_to_celsius(float fhr)
{
    return 5.0 / 9.0 * (fhr - 32)
}

int main()
{
   float fhr;
   for (fhr = 0; fhr <= 300; fhr += 20)
   {
      float celsius = fahrenheit_to_celsius(fhr);

      printf("%3.1f %6.1f\n", fhr, celsius);
   }
}

2voto

Bccyv Points 167

Vous pouvez aussi utiliser une fonction pour cela, ce ne sera pas plus lent, et c'est bien mieux pour la lisibilité (à mon avis) !

#include <stdio.h>

double fhr_to_cls(double fhr)
{
    return ((5.0 / 9.0) * ( fhr - 32));
}

int main()
{
   double fhr;

   for (fhr = 0; fhr <= 300; fhr += 20)
       printf("%3.1f %6.1f\n", fhr, fhr_to_cls(fhr));
}

0voto

user3629249 Points 6914

Concernant :

for (fhr = 0; fhr <= 300; fhr += 20)
  printf("%3.1f %6.1f\n", fhr, (5.0/9.0)*(fhr-32));

le site 0 y 300 y 20 y 32 sont tous integers que le code essaie de mettre dans un float

le 5.0 and 9/0 are double

pour corriger tout ce qui précède, Suggère :

for ( fhr = 0.0f; fhr <= 300.0f; fhr += 20.0f )
    printf("%3.1f %6.1f\n", fhr, (5.0f / 9.0f )*(fhr-32.0f));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X