Ahojte
Dostal som ulohu spravit program v jazyku C na vypocet kvadratickej rovnice. Tento program mam hotovy uzivatel zada koeficienty a,b,c a program vypocita D zisti ci je kladny zaporny alebo rovny nule a hodi vysledok korenou. Mam to aj osetrene proti zlemu zadaniu koeficientou napr a=0... Ale problem je v tom, ze ked diskriminant vide mensi ako nula tak som dal ze rovnica nema v obore R riesenie. Len ono sa to nejako da ze bude mat riesenie v obore komplexnych cisel. Len ja neviem ten vzorec podla ktoreho by som to mohol zapisat do programu. Viem ze ked je D zaporne tak napriklad D=-50 tak to je odmocnona z -50, a to je vlastne odmocnina z -1*50 no a -1 je komplexne cislo i. takze to je vo vysledku i*odmocnina z 50, ale neviem ten vzorec ako to zapisat do programu :(
Dakujem za rady
Fórum › C / C++
Vypocet zaporneho diskriminantu
rozložíš si to na x=-b/2a a y=√-D/2a, spočteš ty hodnoty a to potom zapíšeš ve tvaru z1=x+iy a z2=x-iy
Podle me je jednodussi reseni, pokud detekuje zaporne cislo, tak ze ho vyjadri v komplexnim cisle pomoci i^2, ktere znaci zaporne cislo. Ostatni pripady se temer vylucne nepouzivaji. Takze muj algo by byl asi takovy:
if (zaporny diskriminant)
vysledek = sqrt(kladny diskriminant) * i^2
Matematicky je to podle me spravne, pokud je v tom chybka, tak me opravte.
Študoval som to dlho, ale nechápem ako si to predstavuješ. Čo má byť pemenná vysledek? Podľa toho čo si napísal tak by obsahovala hodnotu -sqrt(abs(D)); No vzorec na imaginárnu časť čísla je (sqrt(abs(D))/2*a)*i.
Jednoducho nechápem aké zjednodušenie tým dosiahneš a som zvedavý. Mohol by si trochu (trochu viac :smile1: ) rozviesť?
No ono to o moc vic zjednodusit nejde. Podle me by ten vzorec spis mohl vypadat takto:
sqrt(abs(D))*i^2
tak som sa s tym pohral troska a podarilo sa mi vytvorit taketo nieco
ratame uz s tym ze diskriminant mam vypocitany aj zadane koeficienty a toto je iba podmienka ak D < 0 (zaporny)
if(diskriminant<0)
{
/*
X1,2 = Re+iIm
e = Re (realne)
d = Im (imaginarne)
*/
// d = sqrt(sqrt((diskriminant)*(diskriminant))); - tento typ je tiez funkcny urobi mi tak isto absolutnu hodnotu z diskriminantu.
d = sqrt(abs(diskriminant));
e = -b; / b je koeficient ktory som zadal tak zapornu hodnotu toho koef. priradim do e.
a = 2*a;
d = d/a;
e = e/a;
printf("Diskriminant je mensi ako nula, preto ma rovnica dve komplexne riesenia x1 a x2.");
printf("\nx1= %f +i(%f)", e, d);
printf("\nx2= %f -i(%f)", e, d);
}
myslim ze mi to funguje spravne :) ked mam napr koeficienty a=6 b=3 c=2 tak diskriminant vide -39 tak vysledok mi vypise
x1= 0.250000 +i(0.520416)
x2=0.250000 -i(0.520416)
Dakujem za rady
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Ošetření nuly a zaporného čísla — založil M.CH.
Vypocet pi — založil Nemo_001
Výpočet na GK — založil Midnight
Vypocet v C# — založil vyhno
Vypočet faktorialu — založil robbie
Moderátoři diskuze