szukanie pierwiastków trójmianu (liczby zespolone rownież)

0

Witam! mam taki problem, pisze na zaliczenie program liczący pierwiastki trómianu kwadratowego uwzględniając liczby zespolone,
niestety zamiast policzyc wyskakuje mi błąd
to co napisałem:

unit trojmiany;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Awartosc: TEdit;
    Bwartosc: TEdit;
    Cwartosc: TEdit;
    Button1: TButton;
    deltawynik: TEdit;
    pierwiastek1wynik: TEdit;
    pierwiastek2wynik: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    dotrojmianu1: TEdit;
    dotrojmianu2: TEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    LiczA: extended;
    LiczB: extended;
    LiczC: extended;
    delta: extended;
    X1   : real;
    X2   : real;
    X3   : real;
    X4   : real;
    A_Ok : boolean;
    B_Ok : boolean;
    C_Ok : boolean;

  end;


var
  Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
 begin
   A_Ok:=TryStrToFloat(Awartosc.Text , LiczA) ;
   B_Ok:=TryStrToFloat(Bwartosc.Text , LiczB) ;
   C_Ok:=TryStrToFloat(Cwartosc.Text , LiczC) ;
  if (A_Ok=True) and (B_Ok=true) and (C_Ok=true) then
   begin

     delta:= (LiczB*LiczB)-(4*LiczA*LiczC);
     If (delta>0) then
     begin

       X1:= (-liczB)+sqrt((delta))/(2*liczA);
       X2:= (-liczB)-sqrt((delta))/(2*liczA);

     end
     else if (delta=0) then
      begin
        X1:= (-liczB)/(2*liczA);
        X2:= (-liczB)/(2*liczA);

     end
     else if (delta<0) then
      begin
       X1:= (-liczB)/(2*liczA);
       X2:= (-liczB)/(2*liczA);
       X3:= +sqrt((delta))/(2*liczA);
       X4:= -sqrt((delta))/(2*liczA);
      end else ;

   pierwiastek1wynik.Text:=FloatTostr(X1);
   pierwiastek2wynik.Text:=FloatTostr(X2);
   dotrojmianu1.Text:=FloatTostr(X3)+ 'i' ;
   dotrojmianu2.Text:=FloatTostr(X4)+'i';
   deltawynik.Text:=FloatTostr(delta);
   end;
 end;
procedure TForm1.Button2Click(Sender: TObject);
begin
application.terminate
end;

end.

pomóżcie jak możecie bo nie mam pojecia co zrobić

0

błąd który wyskakuje to: Invalid floating point operation

0

Jaki błąd?

0
if (delta<0) then
      begin
       X1:= (-liczB)/(2*liczA);
       X2:= (-liczB)/(2*liczA);
       X3:= +sqrt((delta))/(2*liczA);
       X4:= -sqrt((delta))/(2*liczA);
      end else ;

Liczysz pierwiastek z liczby ujemnej?

ponadto

 X1:= (-liczB+sqrt(delta))/(2*liczA);
 X2:= (-liczB-sqrt(delta))/(2*liczA);

Ostatnie if oraz else są niepotrzebne

0

Dzieki, juz wiem gdzie był błąd, teraz mam tylko problem z tym że:

end
     else if (delta<0) then
      begin
       X1:= (-liczB)/(2*liczA);
       X2:= (-liczB)/(2*liczA);
       X3:= +sqrt((delta))/(2*liczA);
       X4:= -sqrt((delta))/(2*liczA);
      end else ;

   pierwiastek1wynik.Text:=FloatTostr(X1);
   pierwiastek2wynik.Text:=FloatTostr(X2);
   dotrojmianu1.Text:=FloatTostr(X3)+ 'i' ;
   dotrojmianu2.Text:=FloatTostr(X4)+'i';
   deltawynik.Text:=FloatTostr(delta);

chciałbym żeby przy liczeniu pierwiastków, pokazywał dla delty >0 i delty=0 wynik tylko w dwoch pierwszych okienkach to jest :

 pierwiastek1wynik.Text:=FloatTostr(X1);
   pierwiastek2wynik.Text:=FloatTostr(X2);

a tylko przy delcie <0
pisał również w okienku
" dotrojmianu1.Text:=FloatTostr(X3)+ 'i' ;
dotrojmianu2.Text:=FloatTostr(X4)+'i';"

bo jak teraz liczy to zawsze pokazuje również wartości dla X3 i X4, ktore to mi są potrzebne tylko przy liczbie zespolonej....

0

np tak

   pierwiastek1wynik.Text:=FloatTostr(X1);
   pierwiastek2wynik.Text:=FloatTostr(X2);
   if delta<0 then
   begin
      dotrojmianu1.Text:=FloatTostr(X3)+ 'i' ;
      dotrojmianu2.Text:=FloatTostr(X4)+'i';
   end
   else
   begin
      dotrojmianu1.Text:='' ;
      dotrojmianu2.Text:='';
   end;
   deltawynik.Text:=FloatTostr(delta);

</delphi>
0

jeszcze raz dziekuje :)
teraz wszystko jest chyba ok

1 użytkowników online, w tym zalogowanych: 0, gości: 1