Ich hab zuerst die Fehlermeldung analysiert, hab sie dann wieder entfernt (Teile davon habe ich vergessen, siehe //... im zweiten Except Block), da ich mir überlegt habe welchen Nutzen es bringt zu wissen welcher Fehler vorkam. Dass ein Fehler in der Berechnung vorkommt steht im Editfeld.
Jetzt bitte nicht böse sein, aber was sagt dir die Meldung
'Nicht Lösbar (Wurzel 0)'
, wenn du fünf Editfelder und ein Button auf dem Formular hast? Du fragst dich wahrscheinlich: was für eine Wurzel? Denn von einer Wurzel sehe ich auf dem Formular nichts. Für mich ist das Formular eine Blackbox. Ich gebe drei Zahlen ein und bekomme zwei Ergebnisse, wenn ich Ok klicke. Selbst wenn ich wüßte was für eine Formel dahinter steckt, ich kann es nicht beeinflussen, denn ich hab keinen direkten Einfluss auf h. Soll ich vorher einen Taschenrechner nehmen alles durchrechnen, damit ich fehlerfreie Eingaben machen? Wozu dann bitte das Programm?
Sinn würde es hier machen:
Delphi-Quellcode:
var a,b,c:real;
begin
a:=strtofloat(Edit1.text);
b:=strtofloat(Edit2.text);
if b = 0 then
begin
MessageDlg('Feld 2 enthält 0 (Division durch 0)', mtError, [mbOk], 0);
Exit;
end;
c := a / b;
Edit3.Text:=FloatToStr(c);
end;
Hier habe ich die Eingaben analysiert und sage dem Anwender wie er den Fehler vermeiden kann. Aber spätestens bei der Formel
c := a / (b - 1)
würde eine Division durch 0 dem Anwender nichts bringen. Die Formel ist Komplex, er hat keinen Einfluß drauf. Also lieber gleich ein allgemeines Error.
Es ist nicht verwerflich eine allgemeine Fehlermeldung auszugeben wenn sie dem Anwender sowieso keinen Sinn ergibt. Und hier macht es keinen Sinn. Die Formel ist zu komplex, er kann sie nicht anpassen.