Laden...

Blöde Fehlermeldung

Erstellt von EDU vor 17 Jahren Letzter Beitrag vor 17 Jahren 4.115 Views
E
EDU Themenstarter:in
4 Beiträge seit 2006
vor 17 Jahren
Blöde Fehlermeldung

Hallo zusammen,

mit C# kenne ich mich sogut wie garnicht aus.

An der FH sollten wir ein Programm mit C# schreiben, welches die Nullstellen einer Quadratischen Funktion berechnet. Allerdings bekomme ich immer eine Fehlermeldung sobald er in den Bereich kommt in welchem die Diskriminante zu berücksichtigen ist. Da gibt er mir als Ergebnis immer n. def. an.

Für Eure Hilfe danke ich euch jetzt schonmal.

Freundliche Grüße

EDU

Hier mal der gesamte Text.


using System;


namespace Funktion
{
    class Program
    {
        static void Main()
        {
            string a;
            string b;
            string c;
            double x1;
            double x2;
            double diskriminante=0;
            double x=0;

            Console.WriteLine("Bitte geben Sie den Wert für a ein:");
            a = Console.ReadLine();
            double da;
            da = Convert.ToDouble(a);

            Console.WriteLine("Bitte geben Sie den Wert für b ein:");
            b = Console.ReadLine();
            double db;
            db = Convert.ToDouble(b);

            Console.WriteLine("Bitte geben Sie den Wert für c ein:");
            c = Console.ReadLine();
            double dc;
            dc = Convert.ToDouble(c);

            diskriminante = Math.Sqrt(db * db - 4 * da * dc);

            if (da == 0)
            {
                if (db == 0)
                {
                    if (dc == 0)

                        Console.WriteLine("Jedes X ist eine Lösung");

                    else

                        Console.WriteLine("Es gibt keine Lösung");
                }

                else
                    x = -dc / db;

                Console.WriteLine("Es gibt nur eine Lösung welche da lautet: x= " + x);
            }

            else
               
                if (diskriminante == 0)
                
                {
                    x = -db / 2 * da;

                    Console.WriteLine("Es gibt nur eine Lösung welche da lautet: x= " + x);
                }
                else
                {
                    if (diskriminante > 0) ;
                    {
                        x1 = (-db - Math.Sqrt(db * db - 4 * da * dc)) / 2 * da;
                        x2 = (-db + Math.Sqrt(db * db - 4 * da * dc)) / 2 * da;

                        Console.WriteLine("Die beiden Lösungen lauten: x1= " + x1 + " x2= " + x2);
                    }

                    if (diskriminante < 0)
                    {
                        double Re;
                        double Im;
                        Im = Math.Sqrt(db * db - 4 * da * dc) / 2 * da;
                        Re = -db / (2 * da);
                        Console.WriteLine("Es gibt zwei konjugiert komplexe Lösungen:");
                        Console.WriteLine("{0,10:F3} +-j {1,10:F3}", Re, Im);

                        

                    }
                }
            Console.ReadLine();
        }
       
    }
}


49.485 Beiträge seit 2005
vor 17 Jahren

Hallo EDU,

Wie poste ich richtig? Punkt 5

herbivore

E
EDU Themenstarter:in
4 Beiträge seit 2006
vor 17 Jahren

Hallo herbivore,

tut mir leid dass ich so ungeschickt poste (bin halt recht "unerfahren").

der Fehler müsste hier irgendwo sein

aber genau weiß ich das ja auch nicht, sonst hätte ich den blöden fehler schon behoben. Kann es sein, dass die Zahlen die aus der Wurzel kommen einfach zu lang sind für die Zahl im double Format?


else
              
                if (diskriminante == 0)
                
                {
                    x = -db / 2 * da;

                    Console.WriteLine("Es gibt nur eine Lösung welche da lautet: x= " + x);
                }
                else
                {
                    if (diskriminante > 0) ;
                    {
                        x1 = (-db - Math.Sqrt(db * db - 4 * da * dc)) / 2 * da;
                        x2 = (-db + Math.Sqrt(db * db - 4 * da * dc)) / 2 * da;

                        Console.WriteLine("Die beiden Lösungen lauten: x1= " + x1 + " x2= " + x2);
                    }

                    if (diskriminante < 0)
                    {
                        double Re;
                        double Im;
                        Im = Math.Sqrt(db * db - 4 * da * dc) / 2 * da;
                        Re = -db / (2 * da);
                        Console.WriteLine("Es gibt zwei konjugiert komplexe Lösungen:");
                        Console.WriteLine("{0,10:F3} +-j {1,10:F3}", Re, Im);

                        

                    }
                }
            Console.ReadLine();
        }
      
    }
}

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo EDU,

es würde mir für den Anfang schon reichen, wenn du die exakte Fehlermeldung postet. (Normalerweise enthält diese dann auch die Zeilennummer, in der der Fehler aufgetreten ist.)

herbivore

E
EDU Themenstarter:in
4 Beiträge seit 2006
vor 17 Jahren

Ach so, er führt das Programm schon aus, nur wo eigentlich stehen sollte x1 = 5 also die erste Nullstelle schreibt er x1 = n. def.

Aber das Programm wird ja ausgeführt somit gibt er mir keinen Zeilenfehler an.

6.862 Beiträge seit 2003
vor 17 Jahren

Naja, n.def bedeutet nichts anderes als das in deiner Variable nen double.NaN (NotANumber) drin ist und des hat man meist bei Division durch 0. Geh doch mitm Debugger einfach mal schrittweise durch was für Werte deine Variable annimmt und bei welchen Befehl auf einmal dann NaN drinsteht.

Baka wa shinanakya naoranai.

Mein XING Profil.

E
EDU Themenstarter:in
4 Beiträge seit 2006
vor 17 Jahren

Hallo Talla,

vielen Dank für die Antwort. Diese bringt mich meiner Lösung auf jedenfall ein großen stück näher.

D
23 Beiträge seit 2006
vor 17 Jahren

Ich tippe eher darauf, daß eine Wurzel von einem negativen Wert gezogen werden soll.

Vielleicht postest Du mal, welche Werte Du für a, b und c eingibst, um den Fehler zu bekommen.