Вопрос относительно правильного использования только сеттеров и переменных - PullRequest
0 голосов
/ 25 сентября 2018

У меня проблема с моим текущим заданием на программирование.Я чувствую, как будто я очень близок к тому, чтобы это исправить, но что-то не так.Я знаю, что мне нужно сделать что-то другое, чтобы программа работала правильно, так как она сейчас не работает, но я не уверен, что это такое.

Я специально борюсь с тем, как использоватьодна частная переменная для создания обоих типов температур.

Вот назначение:

Создать класс температур.Класс должен иметь функцию для установки температуры в градусах Фаренгейта и функцию для установки температуры в градусах Цельсия.Оставьте только один элемент данных в приватном разделе для хранения температуры.Создайте функцию для получения значения в градусах Фаренгейта и функцию получения температуры в градусах Цельсия.Тщательно протестируйте каждую функцию с помощью драйвера.

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);
 }

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Ваша проблема в том, что вы пытаетесь сравнить значение температуры с исходным именем переменной, чтобы определить, является ли оно значением по Фаренгейту или Цельсию.

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

EDIT

Вы также должны использовать математические операции с плавающей запятой, так как целочисленная математика будет усечена до0, так как значение, которое вы ищете, является десятичным, 0,5555 ...

Сохранение значения в качестве одной из требуемых температур сэкономит на вычислениях, когда этот тип температуры необходим.В этом коде ничего не изменится, но при масштабировании программного обеспечения важно исключить чрезмерную обработку.

0 голосов
/ 25 сентября 2018

Просто используйте одну конкретную единицу для хранения внутренней температуры, лучше всего будет Кельвин 1 IMO (так как это стандартная физическая единица СИ).

Выполните необходимые вычисления при настройке или получениитемпература в градусах Фаренгейта или градусах Цельсия.

Также не используйте целочисленное деление для представления дроби:
(5/9) приведет к 0 целочисленному делению, для получения действительного значения должно быть (5.0/9.0)double значение.
То же самое с 9/5, поскольку целочисленное деление приведет к 1.


Дальнейшие проблемы с вашим кодом:

  1. В вашей функцииdouble converter(double temperature) вы пытаетесь использовать f, которого там нет в области действия
  2. В этой же функции у вас есть параметр с именем temperature, который скрывает переменную-член с тем же именем

1) 0K = -459,67F / 0K = -273,15 ° C

...