Temperaturumrechner



  • Hallo Leute,

    ich war bis jetzt nur stiller Leser hier (zumindest ab und an mal). Doch nun habe ich ein E-Technik Studium angefangen und muss C++ Programmieren lernen.

    Wir sollen einen Temperaturumrechner programmieren, klingt super einfach, ist es auch wenn man alle Möglichkeiten benutzen darf. Doch leider dürfen wir keine logischen Abfragen und Verzweigungskonstrukte (if..else und so ) benutzen.

    Hier habe ich Ausschnitte der Aufgabe als Bilder, ich hoffe es ist erlaubt Links zu Posten, da ich keine Funktion entdeckt habe Bilder anzuhängen.

    https://ibb.co/ZgLrmt8
    https://ibb.co/jhkkWZy

    Normalerweise ist es ja super easy, aber hier stehe ich auf dem Schlauch irgendwie. Ich habe einen Teil schon gemacht, nur denke ich dass, es Komplett falsch ist, da ich keine Lösung finde für den Letzten Teil der Aufgabe (Bei einer fehlerhaften Richtungseingabe Celsius <--> Celsius o. Kelvin<-->Kelvin soll der Wert unverändert ausgegeben werden ).

    #include<iostream>
    #include<limits.h>
    using namespace std;
    int umrechenung(int operation, int temp)
    {
    	bool celsius_kelvin(operation == 1);
    	bool kelvin_celsius(operation == 2);
    
    	
    
    	return celsius_kelvin * (temp + 273.15) + kelvin_celsius * (temp - 273.15);
    }
    
    
    int main()
    {
    	
    	//Lösung 1
    	{
    		int a;
    		int b;
    		float temp;
    		float ergebnis;
    		cout << "Umrechnungsart" << endl;
    		cout << "Celsius ---> Kelvin: 1-0!" << endl;
    		cout << "Kelvin ---> Celsius: 0-1!"  << endl;
    
    		cin >> a >> b;
    		cout << "Temperatur eingeben!" << endl;
    		cin >> temp;
    
    		cout << "ERGEBNIS" << endl;
    
    		ergebnis = a * (temp + 273.15) + b * (temp - 273.15);
    
    		cout << ergebnis << endl;
    	}
    
    
    
    
    
    	//Lösung 2
    	int temp = 0;
    	int operation = 0;
    	
    	
    
    
    		cout << "Waehlen Sie die gewuenschte Funktion aus!" << endl;
    		cout << "Celsius ---> Kelvin: 1!" << endl;
    		cout << "Kelvin ---> Celsius: 2!" << endl;
    		cin >> operation;
    		cout << "Geben Sie die Temperatur ein:" << endl;
    		cin >> temp;
    		
    		cout << "Die umgerechnete Temperatur betraegt: " << umrechenung(operation, temp) << endl;;
    		
    
    	
    	
    	
    	system("pause");
    	return 0;
    
    }
    

    Ich hoffe jemand kann mir da weiter Helfen und bedanke mich schon einmal für die Mühe 🙂

    Liebe Grüße
    Andrej



  • @andpi Lösung 1 ist doch ganz nett, aber die doppelte Eingabe (a,b) ist doof

    du kannst aber b aus a berechnen.
    b = 1-a
    oder
    b = !a

    operation in umrechnung kannst du genauso verwenden.



  • Danke für die zügige Antwort und der Vorschlag ist schon mal ganz gut. Nur wie gesagt raffe ich nicht wie ich es hinkriege das er mir die eingegebene Temperatur anzeigt wenn ich die Umrechnungform falsch eingebe, zb. C --> C oder K --> K.



  • @andpi es gibt nur C->K oder K->C, 0 oder 1



  • Naja, man könnte 2 eingeben ...

    int umrechenung(int operation, int temp)
    {
    	bool celsius_kelvin(operation == 1);
    	bool kelvin_celsius(operation == 2);
            bool keins_von_beiden(celsius_kelvin == kelvin_celsius);
    	
    
    	return celsius_kelvin * (temp + 273.15) + kelvin_celsius * (temp - 273.15) + keins_von_beiden * temp;
    }
    

    Für Deine Lösung 1 analog:

    bool vonCelsius(a == 1);
    bool nachKelvin(b == 0);
    bool vonKelvin(a == 0);
    bool nachCelsius(b == 1);
    
    bool vonCnachK((vonCelsius == nachKelvin) * vonCelsius);
    bool vonKnachC((vonKelvin == nachCelsius) * vonKelvin);
    
    bool keinsVonBeiden(vonCnachK == vonKnachC);
    // Rechnung dann wie in Lösung 2
    


  • @Belli
    Danke dir 🙂 mit dem ersten Vorschlag funktioniert es, ich denke mal das es reichen wird. Doch leider bin ich irgendwie zu doof den zweiten Vorschlag zu kapieren.
    Kannst du mir die Veränderungen erklären? Würde es gerne zur Gänze verstehen.

    LG Andrej



  • Bei Deiner Lösung 1 gibst Du ja a und b ein.
    a kann 0, 1 oder was anderes (falsche Eingabe) sein.
    Das Gleiche gilt für b.
    Dementsprechend werden die ersten vier Variablen gesetzt.
    Nun reicht es ja nicht, das für a und b gültige Werte eingegeben werden, beide auf 1 (oder 0) sind ja für sich genommen auch gültig.
    Deshalb wird nun die Kombination geprüft, 1 0 ergibt vonCnachK, weil vonCelsius true ist, ebenso wie nachKelvin.
    Alle anderen Eingabekombinationen führen dazu, dass mindestens einer von vonCelsius und nachKelvin false ist, so dass (vonCelsius == nachKelvin) nur dann true ist, wenn beide false sind (klingt komisch, ist aber so 😄 ) - die Multiplikation mit vonCelsius muss deshalb 0 (false) ergeben.
    Analog läuft die Ermittlung von vonKnachC.

    Der Rest ist dann das Gleiche wie bei dem ersten Vorschlag (Deine Lösung 2)



  • @Belli
    puhh hat etwas gedauert und ich habe es dank dir verstanden, jetzt läuft alles.
    Danke noch mal für die Geduld und Mühe :))

    Liebe Grüße
    Andrej


Log in to reply