Entwickler-Ecke

Sonstiges (Delphi) - pq-Formel


01Detlef - Mi 02.04.03 13:55
Titel: pq-Formel

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
procedure TForm1.Button1Click(Sender: TObject);
var p, q, r, s : Integer;
    d, e, x1, x2 : Extended;
begin
 p:= strtoint(edit1.text);
 q:= strtoint(edit2.Text);

 d:= (sqr(p)/4)+(-1*q);

 if d < 0 THEN
 showmessage ('Es gibt keine Lösung');

 e:= sqrt(d);

 if d = 0 THEN
 x1:= ((p*-1)/2)+ e;
 r:= round(x1);
 Label3.Caption:= inttostr(r);

 if d > 0 THEN
 x1:= ((p*-1)/2)+ e;
 x2:= ((p*-1)/2)- e;
 r:= round(x1);
 s:= round(x2);
 Label3.Caption:= inttostr(r);
 Label4.Caption:= inttostr(s);



end;



hallo,
das ist ein Verfahren, um quadratische Gleichungen zu lösen, jedoch zeigt mein Compiler immer einen Fehler an! Er compiliert es, doch wenn ich Zahlen z.B p=3 und q=2 eingegeben habe, erscheint immer Project1.exe raised exeption class ElnvalidOp with message 'Invalid floating point operation'

Was hat das zu bedeuten, habe ich irgendeinen Fehler drin? Außerdem, kann ich irgendwie auch die genauen Werte ausgeben oder muss ich dann auch x1 und x2 als real Varibalen nehmen?

Danke Detlef


UGrohne - Mi 02.04.03 14:15

Habs mir jetzt net genau durchgeschaut, aber wenn das der Fall ist für eine quadratische Gleichung, dann kann es vorkommen, dass die Diskriminante kleiner 0 ist, und dann kannste ja die Wurzel net draus ziehen. Oder der Nenner ist 0, dann geht das auch net.

//Nachtrag:
Dein kompletter Code hat Lücken (selbst geschrieben? :wink:). Ich mach das gleich vielleicht kurz. Auf jeden Fall, muss Du bei mehreren Anweisungen nach dem if-teil diese mit begin und end einschließen, da liegt wohl der Fehler.

Außerdem rechnest du d und gibst danach ne Warnung aus, wenns kleiner 0 ist. Aber trotzdem rechnest Du dann die Wurzel aus d aus, das geht doch nicht, dakommt schon eine Fehlermeldung her


UGrohne - Mi 02.04.03 14:24

Achja, gibt es eine andere Formel als die Mitternachstformel um quadratische Gleichungen zu lösen?
Denn wenn ich Deinen Code mal in eine mathematische Formel umforme, kommt folgendes raus:

x1,x2= (-b/2) +/- sqrt(b^2/4 - c)

Also so eine Formel hab ich dafür noch nie gesehn


01Detlef - Mi 02.04.03 14:49

hi,

die Formel ist aber so richtig, auch wenn du sie noch nie gesehen hast!!


x1,x2= -p/2 +- sqrt (p^2/4 - q) => pq-Formel halt!!!!!

ok, das Programm läuft jetzt, habe das Wurzelziehen nach weiter hinter versetzt!;) Es läuft auf jeden Fall!


Jetzt noch ein Problem:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var p,q,y: Extended;
i : integer;
begin


FOR i:=1 to 5 DO
BEGIN
STRINGGRID1.Cells[0,i]:= Inttostr(i);
y:= (i*i)+(p*i)+(q);


STRINGGRID1.CELLS[1,i]:= floattostr(y);
end;

end;


Ich möchte, dass p und q beibehalten werden, von der ersten Eingabe und in einer Tabelle die Funktionswerte der Werte x=1 bis x=5 berechnet werden! Kommt auch wieder diese Fehlermeldung!


Danke Detlef


01Detlef - Mi 02.04.03 17:07

alles in Ordnung, habe den Fehler selber behoben!


detlef


tommie-lie - Mi 02.04.03 17:38

Dann wäre es nett und auch zu zeigen, was falsch war ;-)


Linedance - Fr 04.04.03 10:16
Titel: pq-Formel
für quadratische Gleichungen gibt es zwei Lösungsansätze bezüglich der Nullstellen:

1. die allgemeine Form für y=ax²+bx+c
Nullstellen:
x1=(-b+sqrt(b^2-4ac))/2a
x2=(-b-sqrt(b^2-4ac))/2a
D= b^2-4ac

2. den Spezialfall für a=1: y=x²+px+q
mit den Nullstellen
x1=-p/2+sqrt(D)
x2=-p/2-sqrt(D)
D=p^2/4-q

Nullstellenbewertung erfolgt über die Diskriminante D

Gruß M.