Benutzer mit den meisten Antworten
Neu in der Progammierwelt Frage zu meinem programm (quadratische funktion lösen mittels mitternachtsformel)

Frage
-
hier erstmal mein programm:
static void Main(string[] args)
{
double x1, x2, x3, D;
int a, b, c;
Console.WriteLine("Zahl für a");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Zahl für b");
b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Zahl für c");
c = Convert.ToInt32(Console.ReadLine());
D = Math.Sqrt(b * b - 4 * a * c);
if (a == 0 && b == 0 && c == 0)
{
Console.WriteLine("Fehlerhafte Eingabewerte. Es kann keine Lösung berrechnet werden.");
}
else if (a == 0 && b == 0 && c != 0)
{
Console.WriteLine("Fehlerhafte Eingabewerte. Es kann keine Lösung berrechnet werden.");
}
if (D > 0)
{
x1 = (-1 * b + D) / 2 * a;
x2 = (-1 * b - D) / 2 * a;
Console.WriteLine("x1=" + x1);
Console.WriteLine("x2=" +x2);
}
else if (D == 0)
{
x3 = -1 * b / 2 * a;
Console.WriteLine("x=" + x3);
}
else
{
Console.WriteLine(" Es gibt keine Lösung, da die Diskriminante kleiner als 0 ist");
}
Console.ReadLine();
}so nun zu meiner frage:
bei den fällen (a == 0 && b == 0 && c == 0) und (a == 0 && b == 0 && c != 0) ist die Diskriminante ja auch == 0, jedoch will ich dass er mir nur den fehler ausspuckt und nicht den fehler + x=0. wie kann ich mein programm so abändern dass er mir nur die fehlermeldung anzeigt? bin ganz neu in der programmierwelt deshalb komm ich schwer zurecht
danke im vorraus! :)
Antworten
-
Hey,
erste Möglichkeit: Die Methode abbrechen mit der return-Anweisung:
if (a == 0 && b == 0 && c == 0) { Console.WriteLine("Fehlerhafte Eingabewerte."); return; }
Dadurch wird die aktuelle Methode beendet und zur vorherigen zurückgesprungen. In deinem Fall befindest du dich in der Main-Methode, also wird das gesamte Programm beendet. Beachte, dass dabei auch das Konsolenfenster geschlossen wird und praktisch niemand die Fehlermeldung zu sehen bekommt (außer du startest dein Programm mit Strg+F5).
Das kannst du umgehen, indem du die Berechnung inkl. Überprüfung der eingegebenen Werte in ein eigene Methode auslagerst.
static void Main(string[] args) { // Read values of a, b and c var zeros = CalculateZeros(a, b, c); Console.ReadLine(); } private static Tuple<double, double> CalculateZeros(int a, int b, int c) { if (a == 0 && b == 0 && c == 0) { Console.WriteLine("Fehlerhafte Eingabewerte."); return; } // Calculate zeros }
Gegebenenfalls kannst du auch in der Methode eine Exception werfen und diese dann mithilfe eines try-catch-Blocks in der Main-Methode abfangen.
Alternativ kannst du den Block, der für gültige Werte das Ergebnis berechnet, in einen else-Zweig packen.
if (a == 0 && b == 0) { // Print errors } else { // Calculate Zeros }
Damit das ganze übersichtlich bleibt, empfiehlt es sich auch hier, die Berechnung wieder in eine eigene Methode auszulagern.
--
Weitere Anmerkungen:
- Du musst eine Klammer um 2*a setzen:
double x1 = (-1 * b + D) / (2 * a);
- a, b und c können real auch double-Werte annehmen.
- Wenn du eine Unterscheidung zwischen a == 0 && b == 0 && c == 0 und a == 0 && b == 0 && c != 0 treffen willst, würde ich das wie folgt schreiben:
if (a == 0 && b == 0) { if (c == 0) { Console.WriteLine("Fehlerhafte Eingabewerte. Es kann keine Lösung berrechnet werden."); } else { Console.WriteLine("Fehlerhafte Eingabewerte. Es kann keine Lösung berrechnet werden."); } }
Beste Grüße
Vergiss nicht, die Antwort auf deine Frage zu markieren und hilfreiche Beiträge zu bewerten, damit auch andere schnell die Lösung für ihr Problem finden können - und wir nebenbei noch ein paar Punkte verdienen. :)
- Bearbeitet Flogex Sonntag, 22. Oktober 2017 10:46
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 25. Oktober 2017 11:10
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 3. November 2017 18:36