Segítség program hibában?
Helo!
Elkezdtem önerőből C#-ot tanulni (egyetemen volt C++ de az már elég rég volt), viszont a kicsiny programom nem akar lefutni és nem tudom miért.
Jelenleg másodfokú függvényt akarok kiszámoltatni vele, de az istenért nem tudom rávenni hogy kiírja az eredményt, mindig NaN-t ír ki.
kép:
A kód maga így néz ki:
Console.WriteLine("3. Feladat:");
Console.WriteLine("Adja meg a kívánt adatokat az a*x^2 + b*x + c = 0 másodfokú egyenlet kiszámításához");
double a;
double b;
double c;
string A;
string B;
string C;
Console.WriteLine();
Console.WriteLine("Adja meg az 'a' értékét");
A = Console.ReadLine();
if (!double.TryParse(A, out a))
{
Console.WriteLine("Hibás paraméter!");
Console.WriteLine("A kilépéshez nyomjon meg egy gombot");
Console.ReadKey();
Environment.Exit(2);
}
Console.WriteLine();
Console.WriteLine("Adja meg a 'b' értékét");
B = Console.ReadLine();
if (!double.TryParse(B, out b))
{
Console.WriteLine("Hibás paraméter!");
Console.WriteLine("A kilépéshez nyomjon meg egy gombot");
Console.ReadKey();
Environment.Exit(3);
}
Console.WriteLine();
Console.WriteLine("Adja meg a 'c' értékét");
C = Console.ReadLine();
if (!double.TryParse(C, out c))
{
Console.WriteLine("Hibás paraméter!");
Console.WriteLine("A kilépéshez nyomjon meg egy gombot");
Console.ReadKey();
Environment.Exit(4);
}
double elso_resz;
elso_resz = Math.Sqrt(Math.Pow(b,2)-4*a*c)/(2*a);
double elso_x;
elso_x = -b / (2 * a) + elso_resz;
double masodik_x;
masodik_x = -b / (2 * a) + elso_resz;
Console.WriteLine("Az x1 értéke: "+ elso_x);
Console.WriteLine("Az x2 értéke: "+ masodik_x);
Console.WriteLine("A kilépéshez nyomjon meg egy gombot");
Console.ReadKey();
Tudom sok mindent lehetne rövidíteni static double-ökkel, de az jelenleg csak megzavarna :)
Előre is köszönöm a segítséget.
Olyan paramétereket adsz meg, amivel valóba 2 valós megoldása van az egyenletnek?
Debugold.
Nem tudott gyököt vonni miközben négyzetre emeltem, kicsit módosítottam:
double szamolas_egy;
szamolas_egy =Math.Pow(b, 2)-(4*a*c);
var szamolas_ketto = Math.Sqrt(szamolas_egy)/(2*a);
var x_egy = (-b - szamolas_ketto)/(2*a);
var x_ketto = (-b + szamolas_ketto) /(2*a);
var x_elso = Math.Round(x_egy , 2);
var x_masodik = Math.Round(x_ketto, 2);
Console.WriteLine("Az X1 értéke: {0}",x_elso);
Console.WriteLine("Az X2 értéke: {0}",x_masodik);
Console.WriteLine("A kilépéshez nyomjon meg egy gombot");
Console.ReadKey();
Így már szépen lefut, VISZONT a mínusz előjelet nem veszi be, tehát ha mondjuk én C-nek -4et adok meg akkor is kivonás lesz a b-ből a gyök alatt, nem hozzáadás és így nem tudok pozitív eredményt elérni.
Ezzel még lesz egy kis munka.
'... de látom te is csak kötekedni jársz fel.' Próbáltalak rávezetni a hibákra, de ha ez neked kötekedés.... El kellet volna gondolkodni '...és ez mi: var szamolas_ketto = Math.Sqrt(szamolas_egy)/(2*a); ?' legalább ezen ! Miért osztod el (2*a)-val a diszkrimináns gyökét - már ha van neki, amire szintén rámutattam - és utána szintén osztani (2*a)-val ????
Az Sqrt nem csak C#-ban gyökvonás :)
Simkó úr arra próbált rávezetni, hogy már magával a számolással is gondok vannak, leosztod a diszkrimináns gyökér 2*a-val, majd miután összevonod b-vel, megint leosztod az egészet. Így nem fogsz jó eredményt kapni.
Amúgy meg mondták már, mit csinálj: Debugold. Menj szépen lépésről lépésre végig debug módban, és csekkold végig, hogy hol hogyan alakul az eredmény (ha javasolhatom a=1, b=3, c=(-4) értékekkel, így a diszkriminánsod négyzetszám lesz, és egyszerűbb végigkövetni az eredményt)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!