У меня проблема с моим текущим заданием на программирование. Я чувствую, как будто я очень близок к тому, чтобы это исправить, но что-то не так. Я знаю, что мне нужно сделать что-то другое, чтобы программа работала правильно, так как она сейчас не работает, но я не уверен, что это такое.
Я конкретно борюсь с тем, как использовать одну частную переменную для создания обоих видов температур.
Вот назначение:
Сделать температурный класс. Класс должен иметь функцию для установки температуры в градусах Фаренгейта и функцию для установки температуры в градусах Цельсия. Оставьте только один элемент данных в приватном разделе для хранения температуры. Создайте функцию для получения значения в градусах Фаренгейта и функцию получения температуры в градусах Цельсия. Проверьте каждую функцию тщательно с водителем.
F = (9/5) C + 32, C = (5/9) (F — 32)
Текущий код:
#include<iostream>
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;
string response;
cout << "Would you like to convert a Celsius temperature to Fahrenheit or convert a Fahrenheit temperature to Celsius? (Enter C2F or F2C respectively)" << endl;
cin >> response;
cout << "Please enter the temperature you would like to convert in degrees" << endl;
cin >> temperaturetemp;
if (response == "C2F"){Temp1.set_fahrenheit(temperaturetemp);}
else if (response == "F2C"){Temp1.set_celsius(temperaturetemp);}
cout << Temp1.converter(temperaturetemp);
}
Просто используйте одну конкретную единицу для хранения температуры внутри, лучше всего будет Кельвин1 ИМО (так как это стандартная физическая единица СИ).
Выполните необходимые расчеты при установке или получении температуры в градусах Фаренгейта или градусах Цельсия.
Также не используйте целочисленное деление для представления дробей:
(5/9)
будет результатом как 0
целочисленное деление, оно должно быть (5.0/9.0)
чтобы получить действительный double
значение.
То же самое с 9/5
целочисленное деление приведет к 1
,
Дальнейшие проблемы с вашим кодом:
double converter(double temperature)
ты пытаешься использовать f
, который не входит в сферу тамtemperature
, который скрывает вашу переменную-член с тем же именем1)0K = -459,67F / 0K = -273,15 ° C
Ваша проблема заключается в том, что вы пытаетесь сравнить значение температуры с исходным именем переменной, чтобы определить, является ли оно значением по Фаренгейту или Цельсию.
if (temperature = f)
...
else if (temperature = c))
Вы должны выбрать один тип температуры по сравнению с другим, чтобы всегда сохранять значение как и преобразовывать для другого при необходимости. В этом примере используется градус Цельсия.
void set_celsius(double c)
{
temperature = c;
}
void set_fahrenheit(double f)
{
temperature = (5.0/9.0)(f - 32);
}
То же самое можно сделать с вашим геттером для Фаренгейта. Ваш метод-конвертер действительно не нужен (и не называется atm).
РЕДАКТИРОВАТЬ
Вы также должны использовать математические операции с плавающей запятой, поскольку целочисленная математика будет усечена до 0, так как значение, которое вы ищете, является десятичным, 0,5555 …
Сохранение значения в качестве одной из требуемых температур сэкономит на вычислениях, когда этот тип температуры необходим. В этом коде это не будет иметь значения, но при масштабировании программного обеспечения важно исключить чрезмерную обработку.