![]() |
Harmonische Reihe - "Ungültige Gleitkommaoperation"
Hallo zusammen,
ich habe ein Problem, und zwar programmiere ich gerade für einen Bekannten ein paar Sachen zusammen (wegen Iteration -> Harmonische Reihe, Bierschaumzerfall ...all solche simplen Dinge.) Eigentlich könnte ich das auch alles... aber Delphi (ich benutze TurboDelphi 2006) ist ein bisschen bockig. Es geht um folgenden Code:
Delphi-Quellcode:
Eigentlich sehr einfach alles, aber er hört nicht auf mir, sobald ich den besagten Button betätige, eine Fehlermeldung auszugeben -"Ungültige Gleitkommaoperation".
procedure TForm1.Button1Click(Sender: TObject);
var X,eingabe :extended; I :integer; fertig:boolean; begin eingabe:=StrtoFloat(Edit1.Text); for I := 2 to 100000 do begin x:=x+(1/i); if x>eingabe then fertig:=true; {Überprüfung ob X größer als die Eingegebene Zahl ist} end; if fertig then begin Edit1.Text:=('Die eingabe wurde überschritten. Summationen:'); Edit2.Text:=(IntToStr(i)); end else Edit1.Text:=('Die Zahl wurde nicht erreicht, da die Berechnung nach 100000 Summationen abgebrochen wurde.'); end; end. Wahrscheinlich irgendwas ganz blödes was ich einfach übersehe. Für Antworten bedanke ich mich im Voraus. :) So Long Joscha |
Re: Harmonische Reihe - "Ungültige Gleitkommaoperation&
Debugge das doch mal, wo genau kommt diese Fehlermeldung?
Ich vermute mal da:
Delphi-Quellcode:
Ich vermute das du den extended zuerst runden musst (round).
if x>eingabe then
[EDIT] wenn ein wert gefunden wurde wird die schleife nicht abgebrochen... Mach das hier:
Delphi-Quellcode:
if fertig then begin Edit1.Text:=('Die eingabe wurde überschritten. Summationen:');
Edit2.Text:=(IntToStr(i)); break; end else Edit1.Text:=('Die Zahl wurde nicht erreicht, da die Berechnung nach 100000 Summationen abgebrochen wurde.'); end; |
Re: Harmonische Reihe - "Ungültige Gleitkommaoperation&
Hab die Lösung. Ich bin doof. :P
Ich hab schlichtweg vergessen, X am Anfang gleich 1 zu setzen. *facepalm* trotzdem danke. :D so long Joscha |
Re: Harmonische Reihe - "Ungültige Gleitkommaoperation&
"fertig" wurde auch nicht initialisiert (false)
"x" hast du schon bemerkt "i" ist nach Schleifendurchlauf undefiniert Wobei diese beiden Initialisierungsfehler "x" und "fertig", sowie das undefinierte "i" eigentlich von Delphi hätten beängelt werden sollten. :gruebel: Wenn ich dann alles Kürze, dann komm ich auf dieses:
Delphi-Quellcode:
Entweder du prüfst in einer While- oder Repeat-Schleife und brichts bei erfolgreichem Vergleich die Schleife ab
procedure TForm1.Button1Click(Sender: TObject);
var eingabe: Extended; i: Integer; begin eingabe := StrToFloat(Edit1.Text); if eingabe < 11.0901461298634 then begin Edit1.Text := 'Die eingabe wurde überschritten. Summationen:'; Edit2.Text := IntToStr(i); // i ist nicht initialisiert end else Edit1.Text := 'Die Zahl wurde nicht erreicht, da die Berechnung nach ' + '100000 Summationen abgebrochen wurde.'); end; oder du merkst dir wenigstens den Wert von i (also innerhalb der For-Schleife) oder du verlegst die Auswertung auch teilweise in die Schleife. |
Re: Harmonische Reihe - "Ungültige Gleitkommaoperation&
Ich hab jetzt die Auswertung in die Schleife verlegt, aber jetzt sagt er bei jeder Zahl dass sie nicht erreicht werden konnte :(
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var X,eingabe :extended; I :integer; fertig:boolean; begin x:=0; eingabe:=StrtoFloat(Edit1.Text); for I := 1 to 100000 do begin x:=x+(1/i); if x>eingabe then begin break; Edit1.Text:=('Die eingabe wurde überschritten. Summationen:'); Edit2.Text:=(IntToStr(i)); end else Edit1.Text:=('Die Zahl wurde nicht erreicht, da die Berechnung nach 100000 Summationen abgebrochen wurde.'); end; end; |
Re: Harmonische Reihe - "Ungültige Gleitkommaoperation&
Zitat:
Delphi-Quellcode:
oder eben
procedure TForm1.Button1Click(Sender: TObject);
var x,eingabe :extended; I :integer; begin x:=0; eingabe:=StrtoFloat(Edit1.Text); for I := 1 to 100000 do begin x:=x+(1/i); if x>eingabe then begin Edit1.Text:=('Die eingabe wurde überschritten. Summationen:'); Edit2.Text:=(IntToStr(i)); exit; end; end; Edit1.Text:=('Die Zahl wurde nicht erreicht, da die Berechnung nach 100000 Summationen abgebrochen wurde.') end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x,eingabe :extended; I :integer; fertig :boolean; begin x:=0; eingabe:=StrtoFloat(Edit1.Text); fertig:=true; for I := 1 to 100000 do begin x:=x+(1/i); if x>eingabe then begin Edit1.Text:=('Die eingabe wurde überschritten. Summationen:'); Edit2.Text:=(IntToStr(i)); fertig:=false; break; end; end; if fertig then Edit1.Text:=('Die Zahl wurde nicht erreicht, da die Berechnung nach 100000 Summationen abgebrochen wurde.') end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 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 by Thomas Breitkreuz