Umrechnungstabelle Fahrenheit in Celsius



  • Hallo zusammen,

    ich habe ein Programm zur Umrechnung von Grad Fahrenheit in Grad Celsius geschrieben.

    Jedoch zeigt er mir eine Fehlermeldung bei der kalt/warm/heiss Darstellung an. Warum? Bei der Umrechnung zeigt er mir das Ergebnis "na1" an! 👎 😞

    #include <stdio.h>
    
    int rechnung1(int f);
    int rechnung2(double c);
    
    int main()
    {
    	int f, i, temp;
    	double c;
    	printf("Fahrenheit\tCelsius\n");
    
    	for ((f=32)&&(i=0); (f<=402)&&(i<=3); (f=f+10)&&(i++))
    	{
    	rechnung1(f);
    	rechnung2(c);
    	printf("%d\t\t%.2fl\t\t%d\n", f, c, temp);
    		if (i==3)
    		{	printf("\n");
    			i=0;
    		}
    	}
    
    	return 0;
    }
    
    int rechnung1(int f)
    {
    	double c;
    	c=(5/9)*(f-32);
    	return c;
    }
    
    int rechnung2(double c)
    {
    	int temp, kalt, warm, heiss;
    	if (c<20)
    		{
    		temp=kalt;
    		}
    	if (c>50)
    		{
    		temp=heiss;
    		}
    	if ((c>20)&&(c<50))
    		{
    		temp=warm;
    		}
    	return temp;
    }
    

    cu,
    disturbia



  • da gibt es einiges 🙂

    int rechnung1(int f) 
    { 
        double c; 
        c=(5/9)*(f-32); 
        return c; 
    }
    

    ist wenn du es als C code kompilierst..., nunja 5/9 ist 0 🙂
    ändere das vielleicht wiefolgt:

    double rechnung1(int f) 
    { 
        double c; 
        c=(5.0/9.0)*(((double)f-32.0); 
        return c; 
    }
    

    desweiteren sind die werte von

    int temp, kalt, warm, heiss;
    

    undefiniert, oder aber zumindest immer 0. ist das beabsichtigt?



  • deswegen habe ich die Variable double verwendet, dass er mir auch Nachkommastellen angiebt.

    Die Werte kalt, warm, heiss wollte ich zuerst nicht als Variablen definieren, aber das Programm wollte es so.

    Ich will nur erreichen, sobald festgestellt wird dass temp=kalt, dass in meinem Programm dann "kalt" hingeschrieben wird.



  • disturbia schrieb:

    deswegen habe ich die Variable double verwendet, dass er mir auch Nachkommastellen angiebt.

    das allein genügt nicht. es bleibt trotzdem 5/9 = 0, weil der compiler diese zahlerndarstellung intern wie integer behandelt.
    nachkommastellen werden bei integer-zahlern abgeschnitten.

    wenn du deinem compiler mitteilen willst, das du mit flieskommazahlen rechnen willst, dann musst du wenigstens 5.0/9 schreiben.

    disturbia schrieb:

    Die Werte kalt, warm, heiss wollte ich zuerst nicht als Variablen definieren, aber das Programm wollte es so.

    brauchst du ja auch nicht.
    du könntest eine zeichenkette zurückgeben ( "kalt", "warm", "heiss" )

    // temparature comparison
    char* tmp_cmp( double tmp )
    {
    	if ( tmp<20 )				return "kalt";
    	if ( tmp>=20 && tmp<= 50 )	return "warm";
    	if ( tmp>50 )				return "heiss";
    }
    

    den aufruf im hauptprogramm z.b. mit

    puts(tmp_cmp(3));
    

    🙂


Anmelden zum Antworten