Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ungültige Gleitkommaoperation bei Hausaufgabe (https://www.delphipraxis.net/93100-ungueltige-gleitkommaoperation-bei-hausaufgabe.html)

peterpan1 31. Mai 2007 18:40


Ungültige Gleitkommaoperation bei Hausaufgabe
 
Hallo,

Ich bin neu hier im Forum und habe direkt ein Problem.

Wir haben in Info als Hausaufgabe auf, ein Programm zur Lösung quadratischer Gleichungen zu programmieren.

Mein Programm:

Delphi-Quellcode:
...

var p,q,l1,l2,v : real;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
 Close;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 p:=StrToFloat(PEdit.Text);
 q:=StrToFloat(QEdit.Text);

 if sqrt((p/2)*(p/2)-q)<0 then
   begin
    LEdit.Text:='Keine Lösung';
  end
else if
 sqrt((p/2)*(p/2)-q)=0 then
  begin
   LEdit.Text:='1 Lösung';
   l1:=-(p / 2) + sqrt((p/2)*(p/2) - q)
  end
 else
  begin
   LEdit.Text:='Zwei Lösungen';
   l1:=-(p / 2) + sqrt((p/2)*(p/2) - q);
   l2:=-(p / 2) - sqrt((p/2)*(p/2) - q);
  end;


L1Edit.Text:=FloatToStr(l1);
L2Edit.Text:=FloatToStr(l2);

end;

end.
Fehler :

Im Projekt1337.exe ist eine Exception der Klasse EInvalidOp aufgetreten. Meldung 'Ungültige Gleitkommaoperation'. Prozess wurde angehalten. ...

Wo liegt das Problem?

DANKE IM VORAUS!!

bttb930 31. Mai 2007 18:45

Re: Programmierproblem
 
eventuell hier:

if sqrt((p/2)*(p/2)-q)<0 then

soll wohl heißen

if (p/2)*(p/2)-q < 0 then

yankee 31. Mai 2007 18:46

Re: Programmierproblem
 
1. Willkommen in der DP!
2. Der Titel "Programierproplem" ist eher schlecht gewählt.. Über 90% alle Threads in diesem Forum behandeln Programmierprobleme.
3. Wann tritt die Exception denn genau auf? Klick mal in die Zeile, die als erstes ausgeführt wird (also wohl diese Zeile:
p:=StrToFloat(PEdit.Text);) und drück dann auf der Tastatur F5. Dann kompiliere und starte das Proghramm. Wenn das Programm an diese Stelel kommt, stoppt der Delphidebugger das Programm. Dann kannst du mit F7 immer eine Zeile weiterspringen. Das sollte helfen das Problem zu lokalisieren.

EDIT:
Fragen / Anregungen zur DP
ist nebenbei auch das gaaanz Falsche Forum für die Frage:
Zitat:

Zitat von Forenübersicht
Fragen und Anregungen zur Delphi-PRAXiS
(z.B. Lob / Kritik / Anregungen / sonstige Fragen zum Forum)


Phoenix 31. Mai 2007 18:48

Re: Programmierproblem
 
Hallo Peter.

Erstmal herzlich Willkommen hier in der Delphi-PRAXiS. Wenn Du neu bist, dann hast Du ja auch erst vor ganz kurzem unsere Regeln abgesegnet. Da steht unter anderem drin, dass man doch bitte

1.) Das richtige Forum wählen sollte,
2.) einen Aussagekräftigen Titel für seine Frage wählen sollte und
3.) idealerweise Quellcode auch als solchen formatieren sollte.

Wegen 1.) muss ich Deinen Beitrag erstmal in die richtige Sparte schieben.

2.) und 3.) korrigierst Du bitte selber: Du klickst rechts oben auf den 'Edit' - Knopf und änderst den Titel Deiner Frage bitte in etwas, das mit dem Inhalt zu tun hat. z.B. 'Ungültige Gleitkommaoperation bei Hausaufgabe' oder sowas, und dann legst Du bei der Gelegenheit auch noch bitte [ delphi ] [/ delphi ] - Tags (ohne die Leerzeichen freilich) um den geposteten Quellcode. Dann kann man den nämlich auch gescheit lesen und damit vielleicht auch noch helfen.

Danke ;-)

DP-Maintenance 31. Mai 2007 18:49

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Fragen / Anregungen zur DP" nach "Sonstige Fragen zu Delphi" verschoben.
Ist kein Thema, was die DP als solche betrifft.

peterpan1 31. Mai 2007 19:01

Re: Ungültige Gleitkommaoperation bei Hausaufgabe
 
Was ist denn hier los ?

Delphi-Quellcode:

q:=StrToFloat(QEdit.Text);
Schon direkt bei der "2." Zeile zeigt er mir einen Fehler:

Variable 'v' wurde deklariert, aber in 'Unit1' nicht verwendet.
Variable 'x' wurde deklariert, aber in 'Unit1' nicht verwendet.

Aber in der Zeile steht doch überhaupt kein v oder x ?

Im ganzen Programm habe ich diese Variablen nicht verwendet (oben bei Variablen ausgetragen).

EDIT : Jetzt läuft das Programm, aber bringt falsche Ergebnisse. Sind meine Rechnungen richtig?

bttb930 31. Mai 2007 19:04

Re: Ungültige Gleitkommaoperation bei Hausaufgabe
 
guckst du hier

Zitat:

Zitat von peterpan1
Delphi-Quellcode:
...

var p,q,l1,l2,v : real;

steht da v? aber wo steht x?

peterpan1 31. Mai 2007 19:07

Re: Ungültige Gleitkommaoperation bei Hausaufgabe
 
Ok, das v habe ich entfernt.

Es kommen trotzdem falsche Ergebnisse.

inherited 31. Mai 2007 19:07

Re: Ungültige Gleitkommaoperation bei Hausaufgabe
 
Das ist kein Fehler, sondern ein Hinweis, das du die variablen nicht verwendest. Der Fehler steht noch ne Zeile tiefer ;)

peterpan1 31. Mai 2007 19:44

Re: Ungültige Gleitkommaoperation bei Hausaufgabe
 
Delphi-Quellcode:

p:=StrToFloat(PEdit.Text);
 q:=StrToFloat(QEdit.Text);


 if ((p/2)*(p/2)-q)<0 then
   begin
    LEdit.Text:='Keine Lösung';
    L1Edit.Text:='';
    L2Edit.Text:='';
  end
else if
 ((p/2)*(p/2)-q)=0 then
  begin
   LEdit.Text:='1 Lösung';
   l1:=-(p / 2) + sqrt((p/2)*(p/2) - q)
  end
 else
  begin
   LEdit.Text:='Zwei Lösungen';
   l1:=-(p / 2) + sqrt((p/2)*(p/2) - q);
   l2:=-(p / 2) - sqrt((p/2)*(p/2) - q);
  end;

L1Edit.Text:=FloatToStr(l1);
L2Edit.Text:=FloatToStr(l2);

end;

end.
Das ist mein aktuelles Programm und ich komme nicht drauf, was an der Zeile

Delphi-Quellcode:

if ((p/2)*(p/2)-q)<0 then
falsch sein soll...

inherited 31. Mai 2007 20:59

Re: Ungültige Gleitkommaoperation bei Hausaufgabe
 
Sind denn richtige Werte eingegeben worden?

yankee 31. Mai 2007 21:31

Re: Ungültige Gleitkommaoperation bei Hausaufgabe
 
Zitat:

Zitat von peterpan1
Delphi-Quellcode:
L1Edit.Text:=FloatToStr(l1);
L2Edit.Text:=FloatToStr(l2);

Das könnte übrigens auch zu lustigen Ergebnissen führen, weil es in keinem if-drin steht. Also aus dem ersten if werden dann die Anweisungen:
Delphi-Quellcode:
    L1Edit.Text:='';
    L2Edit.Text:='';
überschrieben und es kommen "zufällige" Werte da rein.
Im zweiten Fall wird immerhin l2Edit noch recht interessant sein. Aber das sollte mit deinem Problem nichts zu tun haben.


Das ist mein aktuelles Programm und ich komme nicht drauf, was an der Zeile

Zitat:

Zitat von peterpan1
Delphi-Quellcode:
if ((p/2)*(p/2)-q)<0 then
falsch sein soll...

Seh' ich auch nichts falsches dran... Kommt an dieser Stelle die Exception??

3_of_8 31. Mai 2007 21:51

Re: Ungültige Gleitkommaoperation bei Hausaufgabe
 
Ich glaube eher hier:

Delphi-Quellcode:
sqrt((p/2)*(p/2) - q)
Wenn also q>p²/4, bekommst du ein Problem, weil komplexe Zahlen von Delphi nicht standardmäßig unterstützt wird. ;)

bttb930 31. Mai 2007 22:49

Re: Ungültige Gleitkommaoperation bei Hausaufgabe
 
Zitat:

Zitat von 3_of_8
Ich glaube eher hier:

Delphi-Quellcode:
sqrt((p/2)*(p/2) - q)
Wenn also q>p²/4, bekommst du ein Problem, weil komplexe Zahlen von Delphi nicht standardmäßig unterstützt wird. ;)

erst lesen: das wird durch das if abgefangen!!!

yankee 1. Jun 2007 07:19

Re: Ungültige Gleitkommaoperation bei Hausaufgabe
 
Zitat:

Zitat von bttb930
erst lesen: das wird durch das if abgefangen!!!

*Quelltext nochmal les'*
Seh' ich jetzt anders ;-). Durch welches if wird das wo abgefangen?

bttb930 1. Jun 2007 07:30

Re: Ungültige Gleitkommaoperation bei Hausaufgabe
 
okay, dann noch ein tipp:

1. erst lesen, dann antworten.
2. und zwar die gesamte diskussion, sonst kommt alles doppelt.

anders formuliert: wir sind schon längst viel weiter als du. der thread-eröffner peter pan hat etwa drei beiträge über dir eine neue version gepostet.

yankee 1. Jun 2007 07:51

Re: Ungültige Gleitkommaoperation bei Hausaufgabe
 
@bttb930:

is ja gut... Ich bin nur ein paar Sekunden nach dir in die Diskussion eingestiegen und habe von anfang an alles mitgelesen... Hab' nur überlesen, dass das sqrt nichtmehr da ist...

Dann wäre jetzt aber mal interessant, wo das eigentliche Problem mittlerweile ist ;-).

hoika 1. Jun 2007 08:09

Re: Ungültige Gleitkommaoperation bei Hausaufgabe
 
Hallo,

peter pan,

in welcher Zeile kommt denn nun der Fehler ?
Beim if bestimmt nicht.
Ich tippe mal auf die Wurzel.
Wenn der Werte in der Wurzel negativ ist, gibt es diesen Fehler.

Nimm doch noch ein paar zusätzliche Variablen,
u.a. für (p/2)*(p/2)-q

Ausserdem sollte l1 und l2 initialisiert werden.
Du trägst zum Schluss ja beide Werte in die Editoren ein,
setzt l2 aber nur, wenn es 2 Lösungen gibt.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz