Wurzelberechnung

HoLLoWManN

Grünschnabel
Dieses Programm soll in einer Prozedure in eienr Unit die wurzelberechnen und diese ausgeben, nur bekomm ich es nicht hin wenn es keien Lösung gibt. Da kackt das programm immer ab weil es Division durch 0 ist.

Code:
Hauptprogram

procedure TForm1.Button1Click(Sender: TObject);
var  p,q,d,e,f,g : Real;
begin
     p:=StrToFloat(pEdit.Text);
     q:=StrToFloat(qEdit.Text);
     Quad(p,q,d,e,f,g);

end;

Code:
 Die unit

unit Rechnen;

interface

procedure Quad (p,q:Real;var d,e,f,g:Real);

implementation

procedure Quad (p,q:Real;var d,e,f,g:Real);
begin
d:=(p/2)-q;

if d<0 then
begin
Panel2.Caption:='Es Gibt keine Nullstelle';
X1Edit.Text:=' ';
X2Edit.Text:=' ';
end
else;
If d=0 then
begin
d:=sqr((p/2)-q);
e:=-p/2;
Panel2.Caption:='Es Gibt eine Nullstelle';
X1Edit.Text:=FloatToStr(e);
X2Edit.Text:=' '
end
else
Begin
f:=-p/2+ Sqrt(d);
g:=-p/2- Sqrt(d);
Panel2.Caption:='Es Gibt zwei Nullstellen';
X1Edit.Text:=FloatToStr(f);
X2Edit.Text:=FloatToStr(g)
end;

end
end;
end.

ich hatte als erstes die Ganzen ausgaben im Hauptprogramm aber dann hab ich das nciht mti der utnerscheidung hinbekommen wenns Diskriminat negativ ist weil er das dann vollkommen ignoriert hat, ka wieso.

Hoffe irgendwer kann mir helfen
 
Wie ich das sehe, hast du zwei If-then-else drin. Erstmal
d<0 then ... else ; und dann noch mal if d=0 then ... else ... Na ja, und das letzte wird halt auch ausgeführt, wenn d<0 ist. Und dann gibt es einen mathematischen Fehler, weil man aus einer negativen Zahl keine Wurzel ziehen kann.

Division durch 0 kann ich da nicht erkennen?!

Und was mich auch wundert, deine Diskriminante berechnet sich p/2-q. Berechnet sie sich nicht eigentlich p²/4-q?

lg Hellie
 
Zurück