Avatar
stepanik456
Člen
Avatar
stepanik456:

Ahoj, mám problém a ten spočívá v tom, že nevím jak mám udělat komplexní řešení pči řešení kvadratické rce. Prosím byl by někdo tak laskavý a poradil by mi co s tím? Předem děkuji za jakkoukoliv pomoc.

 
Odpovědět 26.5.2014 13:00
Avatar
Gramli
Redaktor
Avatar
Odpovídá na stepanik456
Gramli:

Tak při výpočtu D=b2 - 4ac budeš kontrolovat, zda D je menší než nula(jestli je mínusové), pokud ano vynásobíš ho -1 a přídáš k němu i.

double D = b^2 - 4*a*c; // vypocitam si D

if(D<0) // kontroluju D
{
 D*=-1;
 double deleniL = b/(2*a); //vydelim si jen b
 double deleniP = sqrt(D)/(2*a); //  odmocnim si D a vydelim

string vysledek = deleniL.ToString() + "+-" deleniP.ToString() + "i"; //musim to dat do stringu vse dohromady
}
Editováno 26.5.2014 13:44
Nahoru Odpovědět 26.5.2014 13:41
Kdo to říká ten to je...
Avatar
stepanik456
Člen
Avatar
Odpovídá na Gramli
stepanik456:

Pomohlo, moc děkuji já jsem si nad tím lámal hlavu asi hodinu. Chybělo mi tam že u imaginární části to mám taky vydělit 2*a.

 
Nahoru Odpovědět  +2 26.5.2014 13:57
Avatar
stepanik456
Člen
Avatar
Odpovídá na Gramli
stepanik456:

Ještě jsem přišel na jeden podstatný nedostatek,

Console.WriteLine("Vítejte u počítače kvadratických rcí. Zadejte prosím parametry Vaší rce.");
Console.WriteLine("Nápověda: a * x^2 + b * x + c");
Console.Write("a=");
int a = Convert.ToInt32(Console.ReadLine());
Console.Write("b=");
int b = Convert.ToInt32(Console.ReadLine());
Console.Write("c=");
int c = Convert.ToInt32(Console.ReadLine());

double D = (b * b) - (4 * a * c);
Console.WriteLine(D);
if(D > 0)
    {
        Console.WriteLine("Rce má 2 kořeny, x1 a x2");
        double x1 = (-b + Math.Sqrt(D)) / (2 * a);
        double x2 = (-b - Math.Sqrt(D)) / (2 * a);
        Console.WriteLine("x1 = " + x1);
        Console.WriteLine("x2 = " + x2);
    }if(D == 0)
    {
        Console.WriteLine("Rce má jeden kořen x1");
        double x1 = (-b + Math.Sqrt(D)) / (2 * a);
        Console.WriteLine("x1 = " + x1);
    }if(D < 0)
    {
        Console.WriteLine("Rce má dva komplexní kořeny.");
        D = D * -1;
        double deleniL = b / (2 * a);
        double deleniP = Math.Sqrt(D) / (2 * a);
        Console.WriteLine("x1= " + deleniL + "+" + deleniP + "i");
        Console.WriteLine("x2= " + deleniL + "-" + deleniP + "i");

    }

Console.ReadLine();

Takhle vypadá můj kód,ale tenhle řádek mi vypisuje pouze celá čísla nenapadá mě proč. Ostatní čísla se vypisují normálně, jen toto ne. Nevíte někdo co s tím? Předem děkuji za ochotu.

double deleniL = b / (2 * a);
Editováno 27.5.2014 7:06
 
Nahoru Odpovědět 27.5.2014 7:05
Avatar
stepanik456
Člen
Avatar
Odpovídá na stepanik456
stepanik456:

Omlouvám se, jen co jsem to sem napsal tak mně napadlo řešení, omlouvám se. Vyřešil jsem to tak že jsem proměnné a, b, c přepsal na double.

Editováno 27.5.2014 7:08
 
Nahoru Odpovědět  +1 27.5.2014 7:08
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na stepanik456
Jan Vargovský:

int/int = int, i když ho přiřadíš k double :)

 
Nahoru Odpovědět  +1 27.5.2014 13:41
Avatar
Odpovídá na stepanik456
Libor Šimo (libcosenior):

Malo by to stačiť takto:

double deleniL = (double)b / (2 * a);

explicitné pretypovanie

Editováno 27.5.2014 14:09
Nahoru Odpovědět  +1 27.5.2014 14:09
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.