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();
}
}
}
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();
}
}
}
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
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.
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.
Hallo Talla,
vielen Dank für die Antwort. Diese bringt mich meiner Lösung auf jedenfall ein großen stück näher.
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.