Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Nullstellen


WOOH - Fr 30.11.07 21:48
Titel: Nullstellen

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.Button1Click(Sender: TObject);
begin
Label5.Caption := '                 Bitte Warten!';
i := 0;
eins := Power (strtofloat (Edit1.Text),3);
zwei := Power (strtofloat (Edit2.Text),2);
drei := Power (strtofloat (Edit3.Text),1);
vier := strtofloat (edit4.Text);
repeat

i := i + 0.0000000000000001;
Label6.Caption := floattostr (i);
FX := eins*i+zwei*i+drei * i + vier;

if FX = 0
 then
Label5.Caption := 'Die erste positive Nullstelle findet sich bei ' + floattostr (i) + ' .'

until FX = 0;


Das ist bis jetz mein Quelltext!
Dabei stürzt mein Programm imma ab^^
Kann mir bitte einer helfen?^^

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


mkinzler - Fr 30.11.07 21:53

In welcher Zeile?


Delete - Fr 30.11.07 21:54

Hallo und :welcome: im Delphi-Forum.

2 Dinge, die sehr wichtig sind. Nicht nur für uns sondern auch für Dich.
  1. Bitte poste Delphi-Codes innerhalb der Delphi-Tags, damit Deine Posts für alle übersichtlicher werden. Die findest Du unter "Bereiche", wenn Du einen Beitrag schreibst.

  2. Bitte formuliere Dein Anliegen etwas klarer. Was willst Du mit dem Programm erreichen und was für einen Fehler gibt er Dir an welcher Zeile aus?


Viele Grüße


Gausi - Fr 30.11.07 21:56

Hallo und :welcome:

Ich nehme mal an, dass du Nullstellen von Polynomen dritten Grades bestimmen willst - aber so, wie du das da vorhast, funktioniert das vorne und hinten nicht ;-)

Ich nehme einfach mal an, dass das Programm scheinbar abstürzt, weil du eine Quasi-Endlosschleife drin hast. Das Programm reagiert dann nicht mehr auf Eingaben.


WOOH - Fr 30.11.07 22:35

Genau das isset!^^
Gibbet denn dazu eine Alternative?^^ Möglichst eine funktionnierende?^^


Gausi - Fr 30.11.07 22:45

Schau dir deinen Code mal genauer an und guck, was du da potenzierst - auf jeden Fall nicht das "x" ;-)

Dann: Ein Vergleich von Floats (= 0) ist immer eine schlechte Idee, was mit der Zahldarstellung im Rechner und damit verbundenen Ungenauigkeiten zu tun hat.

Weiter: Überleg mal, wie lang deine Berechnung dauert, wenn die Nullstelle weiter hinten liegt...du machst das in 0.0000000000000001-er Schritten. D.h. du brauchst 1.000.000.000.000.000 Schritte, um eine Nullstelle bei 1 zu finden.

Ich weiß, dass es eine Formel für Gleichungen dritten Grades gibt - schau mal bei Wikipedia, da sollte man das nachlesen können. Ansonsten helfen iterative Verfahren wie z.B. das Newton-Verfahren, um eine Nullstelle zu finden.

Die andere Frage hab ich mal gelöscht - Bitte erstelle dafür einen eigenen Thread ;-)


JayEff - Di 04.12.07 14:55

Es gibt auch ein Verfahren mit Rekursion zum Thema annäherungsweise Nullstellen berechnen. Wir mussten in der Uni das mal in Ada Implementieren. Das Verfahren ist bekannt unter dem Namen Suche in Wikipedia NEWTONVERFAHREN

Edit: Vielleicht hilft dir das Java-Script Beispiel unter http://de.wikipedia.org/wiki/Newton-Verfahren#Trigonometrische_Funktion