Aufgabe 10
Schwierigkeitsgrad: Mittel
Themen: Fehlerbehandlung Benutzereingabe Funktionen
- Aufgabenstellung
- Lösung
Implementieren Sie ein C++ Programm zur Berechnung der mechanischen Spannung an einem Bauteil. Das Programm soll den Benutzer auffordern, die Kraft (in Newton) und die Querschnittsfläche (in Quadratmillimeter) einzugeben und daraus die Spannung mit der Formel
berechnen.
Das Programm muss folgende Anforderungen erfüllen:
- Benutzen Sie
try-catch-Blöcke, um Fehler zu erkennen und den Benutzer zur erneuten Eingabe aufzufordern. - Die Eingabe soll in einer Funktion erfolgen, die bei Fehlern Exceptions wirft.
- Die Querschnittsfläche darf nicht null sein. Dies soll durch eine sinnvolle Exception abgefangen werden.
- Die Spannungsberechnung soll in einer separaten Funktion erfolgen und bei einem Fehler ebenfalls eine Exception werfen.
- Nach erfolgreicher Berechnung soll das Ergebnis (Spannung in N/mm²) ausgegeben werden und das Programm beendet sich.
Hinweise
- Denken Sie daran, Eingaben als Strings einzulesen und mit
std::stododer ähnlichem in Zahlen umzuwandeln, um Eingabefehler abzufangen. - Verwenden Sie geeignete Standard-Exceptions (
std::invalid_argument,std::runtime_error,std::domain_error). - Stellen Sie sicher, dass nach jedem Fehler eine neue Eingabe möglich ist, bis gültige Werte vorliegen.
- Sie benötigen die
iostreamundstring.
#include <iostream>
#include <string>
float eingabe(std::string frage) {
std::cout << frage << std::endl;
std::string response;
std::cin >> response;
float wert = std::stod(response);
return wert;
}
float spannung(float F, float A) {
if (A <= 0)
throw std::domain_error("Die Querschnittsfläche darf nicht kleiner als 0 sein.");
return F / A;
}
int main() {
float F, A;
// Lese die Kraft ein
do {
try {
F = eingabe("Gebe die Kraft auf das Bauteil an:");
} catch(std::invalid_argument error) {
std::cout << error.what() << std::endl;
continue;
}
break;
} while(true);
float sigma;
do {
// Lese die Querschnittsfläche ein
try {
A = eingabe("Gebe die Querschnittsfläche des Bauteils an:");
} catch(std::invalid_argument error) {
std::cout << error.what() << std::endl;
continue;
}
// Berechne die Spannung
try {
sigma = spannung(F, A);
} catch(std::domain_error error) {
std::cout << error.what() << std::endl;
continue;
}
break;
} while (true);
// Ausgabe
std::cout << "Die Spannung im Bauteil ist: " << sigma << "N/mm^2" << std::endl;
return 0;
}