![]() |
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:
Fehler :
...
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. Im Projekt1337.exe ist eine Exception der Klasse EInvalidOp aufgetreten. Meldung 'Ungültige Gleitkommaoperation'. Prozess wurde angehalten. ... Wo liegt das Problem? DANKE IM VORAUS!! |
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 |
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:
|
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
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. |
Re: Ungültige Gleitkommaoperation bei Hausaufgabe
Was ist denn hier los ?
Delphi-Quellcode:
Schon direkt bei der "2." Zeile zeigt er mir einen Fehler:q:=StrToFloat(QEdit.Text); 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? |
Re: Ungültige Gleitkommaoperation bei Hausaufgabe
guckst du hier
Zitat:
|
Re: Ungültige Gleitkommaoperation bei Hausaufgabe
Ok, das v habe ich entfernt.
Es kommen trotzdem falsche Ergebnisse. |
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 ;)
|
Re: Ungültige Gleitkommaoperation bei Hausaufgabe
Delphi-Quellcode:
Das ist mein aktuelles Programm und ich komme nicht drauf, was an der Zeilep:=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.
Delphi-Quellcode:
falsch sein soll...if ((p/2)*(p/2)-q)<0 then |
Re: Ungültige Gleitkommaoperation bei Hausaufgabe
Sind denn richtige Werte eingegeben worden?
|
Re: Ungültige Gleitkommaoperation bei Hausaufgabe
Zitat:
Delphi-Quellcode:
überschrieben und es kommen "zufällige" Werte da rein.
L1Edit.Text:='';
L2Edit.Text:=''; 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:
|
Re: Ungültige Gleitkommaoperation bei Hausaufgabe
Ich glaube eher hier:
Delphi-Quellcode:
Wenn also q>p²/4, bekommst du ein Problem, weil komplexe Zahlen von Delphi nicht standardmäßig unterstützt wird. ;)
sqrt((p/2)*(p/2) - q)
|
Re: Ungültige Gleitkommaoperation bei Hausaufgabe
Zitat:
|
Re: Ungültige Gleitkommaoperation bei Hausaufgabe
Zitat:
Seh' ich jetzt anders ;-). Durch welches if wird das wo abgefangen? |
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. |
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 ;-). |
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 04:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz