J’ai un problème avec mon travail de programmation actuel. Je sens que je suis sur le point d’avoir raison, mais quelque chose ne va pas. Je sais que je dois faire quelque chose de différent pour que le programme fonctionne correctement, car cela ne fonctionne pas actuellement, mais je ne suis pas sûr de ce que c’est.
Je me demande particulièrement comment utiliser une seule variable privée pour créer les deux types de températures.
Voici la mission:
Faire une classe de température. La classe devrait avoir une fonction permettant de régler la température en degrés Fahrenheit et une fonction permettant de définir une température en degrés Celsius. Ne conservez qu’un seul membre de données dans la section privée pour enregistrer la température. Créez une fonction permettant d’obtenir le en degrés Fahrenheit et une fonction permettant d’obtenir la température en degrés Celsius. Testez chaque fonction à fond avec un pilote.
- Création d’une API / métaprogrammation DSL pour l’initialisation statique d’une description de présentation
- Erreur c2955 – Utilisation de la liste des arguments de modèle de classe
- Conversion non valide de ‘const int *’ à ‘int *’
- Problème FFT (retourne des résultats aléatoires)
- Comment récupérer de la mémoire dédiée via C ++
F = (9/5) C + 32, C = (5/9) (F – 32)
Code actuel:
#include using namespace std; class Temperature { private: double temperature; public: void set_fahrenheit(double f) { temperature = f; } void set_celsius(double c) { temperature = c; } double get_fahrenheit() { return temperature; } double get_celsius() { return temperature; } double converter(double temperature) { if (temperature = f) { return (9/5)*temperature + 32; } else if (temperature = c)) { return (5/9)*(temperature - 32; } } }; int main() { Temperature Temp1; double temperaturetemp; ssortingng response; cout << "Would you like to convert a Celsius temperature to Fahrenheit or convert a Fahrenheit temperature to Celsius? (Enter C2F or F2C respectively)" <> response; cout << "Please enter the temperature you would like to convert in degrees" <> temperaturetemp; if (response == "C2F"){Temp1.set_fahrenheit(temperaturetemp);} else if (response == "F2C"){Temp1.set_celsius(temperaturetemp);} cout << Temp1.converter(temperaturetemp); }
Utilisez simplement une unité spécifique pour stocker la température à l’intérieur. Le meilleur serait Kelvin 1 IMO (car c’est l’unité physique SI standard).
Effectuez les calculs nécessaires pour régler ou obtenir la température en degrés Fahrenheit ou Celsius.
N’utilisez pas non plus la division entière pour représenter les fractions:
(5/9)
donnera 0
division entière, il devrait être (5.0/9.0)
pour obtenir une double
valeur valide.
Même avec 9/5
comme division entière, le résultat sera 1
.
Autres problèmes avec votre code:
double converter(double temperature)
vous essayez d’utiliser f
, ce qui n’est pas dans la scope temperature
, qui ombrage votre variable membre avec le même nom 1) 0K = -459,67F / 0K = -273,15 ° C
Votre problème vient du fait que vous essayez de comparer la valeur de température au nom de la variable initiale afin de déterminer s’il s’agit de degrés Fahrenheit ou Celsius.
if (temperature = f) ... else if (temperature = c))
Vous devez choisir un type de température plutôt que l’autre pour toujours stocker la valeur et convertir pour l’autre en cas de besoin. Dans cet exemple, Celsius est utilisé.
void set_celsius(double c) { temperature = c; } void set_fahrenheit(double f) { temperature = (5.0/9.0)(f - 32); }
La même chose peut être faite avec votre getter pour Fahrenheit. Votre méthode de conversion n’est vraiment pas nécessaire (et ne s’appelle pas atm).
MODIFIER
Vous devriez également utiliser des calculs en virgule flottante, car leur nombre entier sera tronqué à 0, car la valeur que vous recherchez est une valeur décimale, 0,5555 …
Le stockage de la valeur dans l’une des températures souhaitées économisera en calculs lorsque ce type de température est requirejs. Dans ce code, cela ne ferait aucune différence, mais lors de la mise à niveau logicielle, il est important d’éliminer les traitements excessifs.