2011-12-16 10 views
0

このプログラムでは、華氏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; 
} 

答えて

5

5/9整数除算であり、0をもたらすであろう。あなたはダブルスを使用する必要があり、試してみてください。

void Temperature::setTempCelcius(double c) 
{ 
    c = (5.0/9.0) * (f - 32); 
    celcius = c; 
} 
+0

うんthast何1度は華氏であることが、そのは、C Fを読んでいない何らかの理由や、私がなぜ – mystycs

+0

@mystycsを知らないk個になります。それは罰金、それらを読んでいるように見えます。この提案を試しましたか? –

+4

+1これは、毎回その順序でメソッドを呼び出さないと、次の問題が解決されます;-) – AJG85

0

は私の問題は、私はk個のCとFダブルをclearningたということでしたので、私はちょうど関数からそれらを取り除くようです。

#include <iostream> 
using namespace std; 
double c, f, k; 
class Temperature 
{ 
public: 

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

    void setTempKelvin(); 
    void setTempFahrenheit(); 
    void setTempCelcius(); 

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

int main() 
{ 
    Temperature Conv; 

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



    return 0; 
} 

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

void Temperature::setTempCelcius() 
{ 
    c = (5.0/9.0) * (f - 32); 
    celcius = c; 
} 

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




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

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


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

いいえ、それはあなたの問題ではありませんでした。あなたの問題は、Joeの答えが言ったように、あなたが '5.0/9.0'ではなく' 5/9'を計算していたことでした。 –

+0

@Rob複数の問題がありました。 「5/9」はその一つであったが、唯一のものではなかった。 – IronMensan

1

5/9の問題とは別に、 'c'、 'f'、および 'k'という3つの変数があります。クラスのメンバ変数は1つです。別のセットは、mainの変数です。 3番目のセットは、さまざまなget*関数内のパラメータです。

メインサーブの変数、なぜ関数がパラメータをとるのか、クラスには温度の変数が2セットあるのか(どちらもccelsiusなど)は分かりませんが、変数の名前を変えれば、なぜあなたのプログラムが動作していないのかが分かりやすくなります。

+0

このようにプログラムをステップ実行する –

-1
#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; 
} 
関連する問題