none
Neu in der Progammierwelt Frage zu meinem programm (quadratische funktion lösen mittels mitternachtsformel) RRS feed

  • 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! :)

    Sonntag, 22. Oktober 2017 10:02

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. :)

    Sonntag, 22. Oktober 2017 10:44