Ich würde das Ganze noch mit Out-Parametern und Anzahl der Lösungen aufhübchen:
Delphi-Quellcode:
function BerechneNullstellen(a{*x^2 + }, b{*x + }, c: Double; out Null1,Null2:Double):integer;
var
discrim : double;
begin
if a = 0.0 then
begin
if b = 0.0 then
begin
if c = 0.0 then
result := 4 // unendlich viele Nullstellen
else
result := -1; // keine Lösung
end
else
begin
Null1 := -c / b; // Funktion ist eine Gerade
result := 1; // mit einer Nullstelle
end;
end
else
begin
//Variablen durch a teilen, damit PQ-Formel anwendbar
b := b / a;
c := c / a;
discrim := sqr(b/2)-c;
//Prüfen, ob Diskriminante > 0
if discrim > 0.0 then
begin
//Nullstellen ausrechnen
Null1 := (-b/2.0) + Sqrt(discrim);
Null2 := (-b/2.0) - Sqrt(discrim)
result := 2; // 2 Lösungen
end
else if discrim < 0.0 then
result := 0; // keine Lösung bzw. Lösung ist im komplexen Zahlenraum
else
begin
Null1 := -b/2.0;
Null2 := Null1;
result := 1; // doppelte Nullstelle
end;
end;
end;