Что не так с моими температурными преобразованиями? - PullRequest
0 голосов
/ 16 декабря 2011

В этой программе Ям пытается взять 78 градусов по Фаренгейту и вернуть их в класс с версией по Цельсию и Кельвином.Но по какой-то странной причине я просто получаю это как вывод.Что я делаю не так?

Это мой вывод.

78
0
273.15
#include <iostream>
using namespace std;


class Temperature
{
public:

    double getTempKelvin();
    double getTempFahrenheit();
    double getTempCelcius();

    void setTempKelvin(double k);
    void setTempFahrenheit(double f);
    void setTempCelcius(double c);

private:
    double kelvin, fahrenheit, celcius;
    double c, f, k;
};

int main ()
{
    double c, f, k;
    Temperature Conv;

    Conv.setTempFahrenheit(f);
    Conv.setTempCelcius(c);
    Conv.setTempKelvin(k);
    cout << Conv.getTempFahrenheit() << endl;
    cout << Conv.getTempCelcius() << endl;
    cout << Conv.getTempKelvin() << endl;



    return 0;
}

void Temperature::setTempFahrenheit(double f)
{
    f = 78;
    fahrenheit = f;
}

void Temperature::setTempCelcius(double c)
{
    c = (5/9) * ( f - 32);
    celcius = c;
}

void Temperature::setTempKelvin(double k)
{
    k = c + 273.15;
    kelvin = k;
}




double Temperature::getTempFahrenheit()
{
    return fahrenheit;
}

double Temperature::getTempCelcius()
{
    return celcius;
}


double Temperature::getTempKelvin()
{
    return kelvin;
}

Ответы [ 4 ]

5 голосов
/ 16 декабря 2011

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

void Temperature::setTempCelcius(double c)
{
    c = (5.0/9.0) * ( f - 32);
    celcius = c;
}
1 голос
/ 16 декабря 2011

Помимо выпуска 5/9, у вас есть три набора переменных с именами 'c', 'f' и 'k'.Один набор - переменные-члены в классе.Другим набором являются переменные в main.Третий набор - это параметры внутри различных функций get*.

Непонятно, для каких целей служат переменные в main, почему функции вообще принимают параметры или почему у вашего класса есть два набора переменных длятемпературы (и c, и celsius, и т. д.), но если вы дадите названиям наборов переменных разные имена, вам будет легче понять, почему ваша программа не работает.

0 голосов
/ 04 апреля 2014
#include<iostream>
using namespace std;
class temperature
{
    public :
    virtual void calculate(float)=0;
}; 
class ftoc : public temperature
{
    public :
    float c;
    void calculate(float f)
    { 
        c=(f-32)*5/9;
        cout<<"Temperature in celcius is : "<<c<<" `C "<<endl;
    }
};
class ftok : public temperature
{
    public : 
    float k;
    void calculate(float f)
    {
        k=(f+459.67)*5/9;
        cout<<"Themperature in kelvin is : "<<k<<" K "<<endl;
    }
};
int main()
{
    float f;
    ftoc a;
    ftok b;
    cout<<"Enter the temperature : ";
    cin>>f;
    a.calculate(f);
    b.calculate(f);
    return 0;
}
0 голосов
/ 16 декабря 2011

Кажется, моя проблема была в том, что я очищал kc и f double, поэтому я просто удалил их из функций.

...