Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - try ... except


Mr.Lunis - Mi 04.02.04 00:39
Titel: try ... except
Wollte ein Programm schreiben zudem man die absprunghöhe beim fallschirmsprung angibt und dann die fallzeit berechnet wird bis man den fallschirm ziehen muss. diese fallhöhe liegt bei min 650 m. falls man eine kleinere zahl eingibt kommt immer ein blöder warnhinweis. ich möchte, dass sobald ein kleinerer wert als 650 eingegeben wird eine showmessage kommt.

ich hab delphi seit neuestem in der schule und bin deshalb noch nicht so gut. is bestimmt was popeliges was ich falsch gemacht hab. aber bitte um hilfe!!!!!!!!!

So siehts bei mir aus .............aber funzt nicht!!!



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.BerechnenClick(Sender: TObject);
var h,t:real;                           {h=Absprunghoehe
                                                        t=Sprungdauer}

begin
  h:=StrToFloat(Absprunghoehe.Text);
  try  
    t:=Sqrt(2*(h-650)/9.81);
  except
    on EInvalidOp do ShowMessage('Blablabla');
  end;
  Sprungdauer.Text:=FloatToStr(t);

end;


jetzt schon mal danke!!!!

Moderiert von user profile iconPeter Lustig: Delphi-Tags hinzugefügt und Doppelthread gelöscht


Raphael O. - Mi 04.02.04 00:45

wenn ichs richtig verstanden habe, dann solltest du anstatt dem try-except block einfach eine Überprüfung

Delphi-Quelltext
1:
if t<650 then Showmessage('blabla');                    

ausreichen...


Christian S. - Mi 04.02.04 00:47

Hallo!

Erst einmal ein kleiner Hinweis:
Du musst das Syntaxhighlighting des Quelltextes nicht selbst machen. Umschließe Quelltext mit den Delphi-Tags und alles, was Du noch machen musst, sind die Einrückungen.

Nun zu Deinem Problem:
Für so etwas sollte man keine Exception benutzen. Wenn man weiß, wie ein Fehler auftritt, sollte man diese Möglichkeit vorher "sauber" abarbeiten. Hier wäre es also sinnvoller eine Abfrage nach dem Motto "if h < 650 then" zu machen. Aber natürlich bevor Du die Wurzel ziehst.

MfG
Peter


Mr.Lunis - Mi 04.02.04 00:58

Danke für die Tipps!
Stimmt! Es hat so geklappt!

Aber nur mal aus Neugierde wie hätte es denn mit try...except aussehen müssen?????????????

Danke und bis dann


Raphael O. - Mi 04.02.04 01:01

try...except ist nur dazu da, um "echte" Fehler abzufangen, wie zum Beispiel eine Division durch 0... da so etwas bei deinem Text nicht der fall ist kann man dein Problem damit nicht lösen...
hat eben ne andere Aufgabe ;)


Mr.Lunis - Mi 04.02.04 01:10

ichl ja nicht besserwisserisch sein oder nerven
aber.....

1. mein lehrer hat das mit try...except gemacht

2. is die wurzel einer negativen zahl ein schwerwiegender fehler genauso wie eine division durch null!


Bis denne


Christian S. - Mi 04.02.04 01:10

Hallo!

Prinzipiell sollte man Exceptions nur benutzen bei Fehlern, die man nicht voraussehen kann. Alles andere sollte man schon vorher ausschalten. Dies schließt in den allermeisten Fällen auch eine Divisioin durch Null ein.

MfG
Peter

//Edit: Eine Exception zu verwenden ist hier schlecht. Der Fehler kann vorausgesehen werden, also sollte man auch vorher dafür sorgen, dass erst gar keine Exception auftritt.


Raphael O. - Mi 04.02.04 01:14

Mr.Lunis hat folgendes geschrieben:
ichl ja nicht besserwisserisch sein oder nerven
aber.....
1. mein lehrer hat das mit try...except gemacht
2. is die wurzel einer negativen zahl ein schwerwiegender fehler genauso wie eine division durch null!

ok, dann hast du recht, aber es ist wirklich ###zensiert### das mit einer exception zu machen ;)
vor allem, wenn es schon mit einer einfachen if ... then... Lösung funktioniert..

sag deinem Lehrer mal der soll sich schämen :!: :twisted:


Mr.Lunis - Mi 04.02.04 01:15

ich habs ja kapiert ich wollte ja auch nur einfach mal wissen wie es mit try except aussieht und ich weiß ja das es auch so geht!!!! Ganz sicher!!! auch wenn ichs anders besser machen kann. ich wollts ja nur wissen. nix für ungut!


Trotzdem danke für die hilfe.

Ciao


Raphael O. - Mi 04.02.04 01:26

war in keinster weise böse gemeint oder so, mein Beitrag :)
(habe deinen so aufgefasst, als ob du das so verstanden hättest... also sag ich auch mal "nix für ungut" ;) )


Delete - Mi 04.02.04 01:46


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
uses
  math;

procedure TForm1.Button1Click(Sender: TObject);
var
  h, t: double;
  Code: Integer;
resourcestring
  MsgCaption = 'Die letzten Worte des Fallschirmspringers';
  MsgText = 'Die Wolke nehme ich noch mit...';
begin
  val(Edit1.Text, h, Code);
  if Code = 0 then
  begin
    t := Sqrt(2*(h-650)/9.81);
    if t < 650.0 then
      Messagebox(Handle, PChar(MsgText), PChar(MsgCaption), MB_ICONWARNING)
    else
      Edit1.Text := Format('%.2n', [t]);
  end;
end;


Christian S. - Mi 04.02.04 10:36

Öhm. Den Code verstehe ich nicht ganz. Wieso fragst Du ab, ob t kleiner 650 ist. Und selbst wenn man h abfragt, sollte man das vor der Wurzel machen, oder?


Delete - Mi 04.02.04 12:39

Shit. Ich habe mich auf die Syntax konzentriert.

So sollte es gehen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
uses
  math;

procedure TForm1.Button1Click(Sender: TObject);
var
  h, t: double;
  Code: Integer;
resourcestring
  MsgCaption = 'Die letzten Worte des Fallschirmspringers';
  MsgText = 'Die Wolke nehme ich noch mit...';
begin
  val(Edit1.Text, h, Code);
  if Code = 0 then
  begin
    if h < 650.0 then
      Messagebox(Handle, PChar(MsgText), PChar(MsgCaption), MB_ICONWARNING)
    else
    begin
      t := Sqrt(2*(h-650)/9.81);
      Edit1.Text := Format('%.2n', [t]);
    end;
  end;
end;