C++ :: Aufgabe #279 :: Lösung #1
2 Lösungen

#279
flexible Temperaturumrechnung
Fortgeschrittener - C++
von Gnom
- 10.04.2020 um 11:24 Uhr
Gegeben sei ein String-Array mit einer beliebigen Anzahl von Temperaturangaben in °C, °F oder K (z. B. "24,5 °C", "74.3 °F" oder "-270 K"). Dabei sollen unterschiedliche Ausprägungen vorliegen: positive/negative Zahlen, Ganzzahlen/Kommazahlen, Trennung durch Punkt oder Komma, Angaben mit "°" oder ohne, Angabe der Einheit ("K"/"C"/"F", evtl. auch "k"/"c"/"f"), Variationen der Anordnung von Leerzeichen.
Das Programm soll nacheinander alle Strings analysieren und jeweils die Zahl und die Einheit ermitteln und in Variablen speichern, die Temperatur von der gegebenen Einheit in die beiden anderen Einheiten umrechnen und alle drei Werte geordnet mit einer Nachkommastelle ausgeben.
Das Programm soll nacheinander alle Strings analysieren und jeweils die Zahl und die Einheit ermitteln und in Variablen speichern, die Temperatur von der gegebenen Einheit in die beiden anderen Einheiten umrechnen und alle drei Werte geordnet mit einer Nachkommastelle ausgeben.
#1

von dewe (460 Punkte)
- 20.04.2020 um 21:29 Uhr

#include <iostream> #include <string> #include <stdlib.h> using namespace std; void Temperature_convert(string Input); double convert_KelvinCelsius(double k); double convert_KelvinFahrenheit(double k); double convert_CelsiusFahrenheit(double c); double convert_CelsiusKelvin(double c); double convert_FahrenheitCelsisus(double f); double convert_FahrenheitKelvin(double f); double ValueOfInput(string Input); int sign(string Input); bool number_test(char Input); int unit_typify(string Input); int main() { string Temperature; getline(cin,Temperature); Temperature_convert(Temperature); return 0; } void Temperature_convert(string Input) { if(unit_typify(Input) == 0) { if(ValueOfInput(Input)>=0) { cout<< convert_KelvinCelsius(ValueOfInput(Input)) << "°C \n"; cout<< convert_KelvinFahrenheit(ValueOfInput(Input)) << "°F \n"; } else cout<< "Keine gültiger Wert für Kelvin \n"; } else if(unit_typify(Input) == 1) { if(ValueOfInput(Input)>= -273.1) { cout<< convert_CelsiusKelvin(ValueOfInput(Input)) << "K \n"; cout<< convert_CelsiusFahrenheit(ValueOfInput(Input)) << "°F \n"; } else cout<< "Keine gültiger Wert für Celsius \n"; } else if(unit_typify(Input) == 2) { if(ValueOfInput(Input)>= -459.67) { cout<< convert_FahrenheitCelsisus(ValueOfInput(Input)) << "°C \n"; cout<< convert_FahrenheitKelvin(ValueOfInput(Input)) << "K \n"; } else cout<< "Keine gültiger Wert für Fahrenheit \n"; } else cout<< "Keine gültige Einheit \n"; } double convert_KelvinCelsius(double k) { double c = k-273.1; return c; } double convert_KelvinFahrenheit(double k) { double f = convert_CelsiusFahrenheit(convert_KelvinCelsius(k)); return f; } double convert_CelsiusFahrenheit(double c) { double f = c*9/5+32; return f; } double convert_CelsiusKelvin(double c) { double k = c+273.1; return k; } double convert_FahrenheitCelsisus(double f) { double c = (f-32)*5/9; return c; } double convert_FahrenheitKelvin(double f) { double k = convert_CelsiusKelvin(convert_FahrenheitCelsisus(f)); return k; } double ValueOfInput(string Input) { int value_length = 0; int value_start_position = 0; double value; while(number_test(Input[value_start_position]) == 0) value_start_position++; while(number_test(Input[value_start_position+value_length]) == 1) value_length++; char Value[value_length]; Input.copy(Value, value_length, value_start_position); value = atof(Value)*(double)sign(Input); return value; } int sign(string Input) { int sign = 1; if(Input[0] == '-') sign = -1; return sign; } bool number_test(char Input) { bool check = 0; double a = Input - '0'; for(int i = 0; i<=9 && check == 0; i++) { if(a == i || Input == '.') check = 1; } return check; } int unit_typify(string Input) { int type = -1; if(Input[Input.length()-1] == 'K') type = 0; else if (Input[Input.length()-1] == 'C') type = 1; else if (Input[Input.length()-1] == 'F') type = 2; return type; }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1