Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Ungültige Gleitkommaoperation&Variable nicht initialisiert


Bioman - So 30.08.09 20:13
Titel: Ungültige Gleitkommaoperation&Variable nicht initialisiert
Hallo
ich habe folgende Probleme :
Ich häng an einem Programm dran, welches mir als eine Art Rechner dienen soll. Teilweise läuft es auch, aber als ich vorhin weiterprogrammiert hab, kamen die Fehlermeldungen, dass 3 meiner Variablen (metall, kristall, deuterium) nicht initialisiert wurden und dass ich irgendwie eine ungültige Gleitkommaoperation hätte, die letzte Meldung kommt jedoch erst beim ausführen der .exe
Mein quellcode :

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button10Click(Sender: TObject);
var stufe,metall,kristall,deuterium : real;
begin
stufe := strtofloat (edit10.text);
if RadioButton5.checked = true then
    metall := (power(1.5,stufe)*40);
  if RadioButton5.checked = true then
    kristall := (power(1.5,stufe)*10);
if Radiobutton6.Checked = true then
    metall := (power(1.6,stufe)*30);
  if RadioButton6.checked = true then
    kristall := (power(1.6,stufe)*15);
if Radiobutton7.checked = true then
    metall := (power(1.5,stufe)*150);
  if RadioButton7.checked = true then
    kristall := (power(1.5,stufe)*50);

edit7.text := floattostr (trunc(metall));
edit8.Text := floattostr (trunc(kristall));
edit9.Text := floattostr (trunc(deuterium))
end;

ich war schon so weit, dass die Anweisungen liefen von radiobutton 5-7, als ich dann jedoch weitergeschrieben hatte, kamen die fehlermeldungen oben, also löschte ich das neu geschriebene wieder und versuchte es nochmal aber nun waren die fehlermeldungen auch hier.

Ich hab aber auch noch eine Frage :
Wie bekomm ich es hin, dass ich unter eine if-funktion 2 oder 3 anweisungen bekomme ?? mit einfach 2 stück hinschreiben klappts nicht so wirklich


Danke für eure Hilfe


jaenicke - So 30.08.09 20:35

Hallo und :welcome: im Forum!
user profile iconBioman hat folgendes geschrieben Zum zitierten Posting springen:
dass 3 meiner Variablen (metall, kristall, deuterium) nicht initialisiert wurden
Werden sie ja auch nur, wenn RadioButton5.checked exakt gleich true ist. Wobei der Vergleich so auch falsch ist.
Mehr dazu steht hier unter Anfängerfehler:
http://www.delphi-treff.de/tutorials/objectpascal/programmierung-mit-boolean-werten/page/4/
Und warum das auch vollkommen unlogisch ist:
http://www.delphi-forum.de/viewtopic.php?p=560637#560637
Richtig:

Delphi-Quelltext
1:
2:
if RadioButton5.Checked then
  ...
Aber auch dann wird die Variable nicht initialisiert, wenn der RadioButton nicht angeklickt ist.

Dann hast du da klammern zu viel:

Delphi-Quelltext
1:
2:
3:
metall := (power(1.5,stufe)*40);
// besser:
metall := Power(1.5, stufe) * 40;
Beides funktioniert meistens, aber nicht immer.

user profile iconBioman hat folgendes geschrieben Zum zitierten Posting springen:
und dass ich irgendwie eine ungültige Gleitkommaoperation hätte
Das wird vermutlich bei Power oder so auftreten, aber das müsstest du mit Debuggen näher untersuchen [http://www.delphi-treff.de/delphi-ide/debugger/].

user profile iconBioman hat folgendes geschrieben Zum zitierten Posting springen:
Ich hab aber auch noch eine Frage :
Wie bekomm ich es hin, dass ich unter eine if-funktion 2 oder 3 anweisungen bekomme ?? mit einfach 2 stück hinschreiben klappts nicht so wirklich

Delphi-Quelltext
1:
2:
3:
4:
5:
if a then
begin
  ...
  ...
end;
Weitere Grundlagen-Fragen werden hier beantwortet: ;-)
http://crashkurs.christian-stelzmann.de
und die neue Version speziell ab Turbo Delphi:
http://www.christian-stelzmann.de/index_tutorials_crashkurs_reloaded.html

Ein weiteres gutes Online-Buch:
http://de.wikibooks.org/wiki/Programmierkurs:_Delphi


Bioman - So 30.08.09 21:07

Okay..erstmal danke...das einzige was mir nun wirklich noch probleme macht, ist die sache mit der ungültigen gleitkomma operation
Folgende Fehlermeldung bekomme ich :

Im Projekt Project3.exe ist eine Exception der Klasse EInvalidOp aufgetreten. Meldung :'Ungültige Gleitkommaoperation'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
program Project3;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.Run;
end.


Der Fehler wird in dem Project.dpr angezeigt bei dem "end" (einmal war es sogar "Begin")

Ich check garnichts mehr...
thx für die hilfe


platzwart - So 30.08.09 21:08

Eventuell irgendwo eine Division mit einer Variablen? Wenn die 0 ist gibt es einen Fehler...


Bioman - So 30.08.09 21:41

ne...der fehler muss ganz gewiss in genau der procedur sein, weil die anderen alle funktionieren...ich hab auch mal sicherheitshalber die werte alle auf 1 gesetzt aber es passiert halt immer bei dem klick auf den einen button der für die procedur zuständig ist...also die die ganz oben von mir gepostet wurde..wenn ihr wollt geb ich auch gern den ganzen quellcode raus.
thx


platzwart - So 30.08.09 21:49

OK, wenn du dir so sicher bist, dass der Fehler in dieser Prozedur verursacht wird, kannst du folgendes probieren:

Kommentiere alle Zeilen aus. Dann starten und sehen, ob der Fehler auftritt. Dann machst du das Kommentieren Zeile für Zeile rückgängig und testest wieder. Dann weißt du schließlich, in welcher Zeile der Fehler auftritt.

Das ganze kannst du natürlich auch mit Hilfe der schrittweisen Ausführung bzw. mit Haltepunkten ebenso realisieren.


jaenicke - So 30.08.09 21:53

Der Fehler wird vermutlich bei der Ausgabe geschehen, wenn der Wert der entsprechenden Variable nicht zugewiesen wurde und einen seltsamen Wert hat. Denn wenn ansonsten die Werte in Ordnung sind, kann vorher der Fehler nicht auftreten.

Aber mit einem Haltepunkt und Debuggen, hättest du die passende Zeile schon längst... :roll:


Bioman - Do 03.09.09 16:17

Also, mithilfe meines Infolehrers kamen wir auf den Fehler, auch wenn er selbst diesen nicht direkt sah
er war in der edit festlegung, da ich dort floattostr stehen hatte aber eig. musste dort inttostr hin.

Moderiert von user profile iconNarses: Weitere Frage entfernt.


Narses - Do 03.09.09 16:30

Moin!

Markierst du den Thread noch entsprechend, wenn dein Problem gelöst ist? Danke. ;)

cu
Narses