Temperatur umrechner geht nicht



  • hi, ich hab ein Problem,

    meine funktion celsius2fahr funktioniert nicht so wie ich es will, es addiert die 32 am ende nicht hinzu und ich weiss nicht wieso. Hoffe jemand kann mir da weiterhelfen

    #include <iostream>
    using namespace std;
    
    double fahr2celsius(double fahrenheit){
    	double celsius;
    	celsius=(fahrenheit-32)*5/9;
    	return celsius;
    }
    double celsius2fahr(double celsius){
    	double fahrenheit;
    	fahrenheit=(9/5*celsius+32);
    	return fahrenheit;
    }
    int main(){
    	double x,y;
    	cin>>x;
    	cout << "Fahrenheit: " << x << "in celsius: " << fahr2celsius(x) << endl;
    	cin>>y;
    	cout << "Celsius: " << y << "in Fahrenheit: " << celsius2fahr(y) << endl;
    	return 0;
    }
    

  • Mod

    Bist du sicher, dass du dein Problem korrekt analysiert hast? Das Problem, das ich nämlich sehe (ohne den Code ausprobiert zu haben), ist, dass 9/5 = 1 ist, jedenfalls so wie du es hier schreibst. Denn 5 und 9 sind beides Integer (Ganzzahlen) und wenn du eine Rechnung nur mit Ganzzahlen durchführst, dann ist das Ergebnis wieder eine Ganzzahl.

    Folgende Varianten sollten funktionieren:

    (9./5*celsius+32)
    

    9. ist ein double (Fließkommazahl), Fließkommazahl geteilt durch Ganzzahl ergibt eine Fließkommazahl, hier also 1.8.

    (9/5.*celsius+32)
    

    Andersrum geht natürlich auch.

    (9./5.*celsius+32)
    

    Oder alles komplett als double

    (9*celsius/5+32)
    

    Multiplikation und Division werden von links nach rechts abgearbeitet. 9*celsius ist eine Fließkommazahl, da celsius ein double ist. Wenn man das Zwischenergebnis durch 5 teilt, erhält man entsprechend auch wieder eine Fließkommazahl. Aus diesem Grund dürfte dein fahr2celsius ebenfalls funktionieren, da das dortige Zwischenergebnis, (fahrenheit-32)*5 , eine Fließkommazahl ist und erst dann durch die Ganzzahl 9 geteilt wird.

    Wie gesagt: Code nicht getestet. Es ist daher möglich, dass ich andere Fehler übersehen habe.



  • vielen dank!
    habs verstanden nun



  • Beim naechsten Mal:
    1. Code in einfachere Schritte zerlegen.
    2. Debugger einsetzen.


Anmelden zum Antworten