Autor Beitrag
01Detlef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 85



BeitragVerfasst: Mi 02.04.03 13:55 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 85



BeitragVerfasst: 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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 85



BeitragVerfasst: Mi 02.04.03 17:07 
alles in Ordnung, habe den Fehler selber behoben!


detlef
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Mi 02.04.03 17:38 
Dann wäre es nett und auch zu zeigen, was falsch war ;-)

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Linedance
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 04.04.03 10:16 
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.