Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Falls Variable(n) vorhanden mache das sonst mache dies (https://www.delphipraxis.net/112765-falls-variable-n-vorhanden-mache-das-sonst-mache-dies.html)

p80286 29. Apr 2008 11:23

Re: Falls Variable(n) vorhanden mache das sonst mache dies
 
Hallo Thknub,

hast Du es mal mit dem Debugger versucht? mit [F7] und [F8] geht einem manchmal ein ganzer Kronleuchter auf.

Bei mir erhalte ich bei folgendem Sourcecode:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  a : real;
begin
  form1.Edit3.Text:='xxx';
  a:=strtofloat(form1.Edit3.text);
end;
"xxx ist kein gültiger Gleitkommawert"

Da hat er recht! Du solltest deine Eingabetextfelder zumindestens mit "0.0" vorbelegen!

Buchstaben und andere Fehleingaben mußt Du dann auch noch herausklauben.

Viel Spaß

K-H

mkinzler 29. Apr 2008 11:26

Re: Falls Variable(n) vorhanden mache das sonst mache dies
 
Ich würde eher TryStrToFloat(), TMaskEdit oder Falscheingaben verhindern

glkgereon 29. Apr 2008 11:50

Re: Falls Variable(n) vorhanden mache das sonst mache dies
 
Ein paar Tipps zu deinem Code:

Delphi-Quellcode:
if a>0 then bo1 := True else bo1 := False;
ist äquivalent zu
Delphi-Quellcode:
bol := a>0;
Ausserdem lässt sich
Delphi-Quellcode:
if bo2 and bo4 and bo5 = True then
ersetzen durch
Delphi-Quellcode:
if bo2 and bo4 and bo5 then
ansonsten ist es dank der "intuitiven Benennung" deiner Variablen praktisch unmöglich dir zu sagen, was da falsch ist :?

[Edit]
Achso, es wäre sehr praktisch zu wissen, wo genau der Fehler auftritt...
Allgemein:
StrToFloat wenn "Edit1" da steht funktioniert nicht
und durch null teilen wird auch eher ungern gesehen :wink:

thknub 29. Apr 2008 14:50

Re: Falls Variable(n) vorhanden mache das sonst mache dies
 
@ p80286

Sie sind mi 0 vorbelegt.

@ glkgereon

Zitat:

Allgemein:
StrToFloat wenn "Edit1" da steht funktioniert nicht
und durch null teilen wird auch eher ungern gesehen
Meinst du im Feld edit1 steht edit1? Ich hab überall 0 drin stehen...
Wo teile ich durch null?

tomsel 29. Apr 2008 16:08

Re: Falls Variable(n) vorhanden mache das sonst mache dies
 
ich glaub, du solltest die Formeln zur Winkelberechnung noch mal prüfen. Übrigens: Der Debugger würde dir m.E. sehr gut weiterhelfen, die Fehlerstelle zu finden.

thknub 29. Apr 2008 16:30

Re: Falls Variable(n) vorhanden mache das sonst mache dies
 
Wenn ich F7 drück kommt das:

http://img514.imageshack.us/img514/346/dfgla6.png

Bei F8 ist die nächste Zeile bordeauxrot markiert, also
Delphi-Quellcode:
Application.Initialize;

Fussball-Robby 29. Apr 2008 16:32

Re: Falls Variable(n) vorhanden mache das sonst mache dies
 
Dann drück solange F7, bis dass du an der richtigen Stelle bist :wink:

p80286 29. Apr 2008 16:52

Re: Falls Variable(n) vorhanden mache das sonst mache dies
 
Hallo thknub,

ich hab mir die Freiheit genommen und Deinen Source mal ausprobiert, da ich es nicht so mit der Mathematik habe und darum nicht so ganz verstanden habe was das Programm genau machen soll.

Code:
{Berechnung Winkel Gamma}
if bo1 and bo2 and bo3 = True then b2 := h*arccos(sqr(c)/(sqr(a)+sqr(b)-2*a*b)) else b2 := 0;
Da wird arccos wohl mit den falschen Werten gefüttert.
wenn a=11 und b=22 und c=33 dann ist der Inhalt der Klammer =9 und das mag arccos nicht.
Schau mal in die Hilfe.

viel Spaß noch

K-H

thknub 29. Apr 2008 17:43

Re: Falls Variable(n) vorhanden mache das sonst mache dies
 
Das Programm ist dazu gedacht mathematische Aufgaben zu lösen und da wird es garantiert keine ernstgemeinte Aufgabe geben, die diese Werte vorgibt, da die Werte kein Dreieck ergeben, sondern einen Strich...

thknub 29. Apr 2008 17:46

Re: Falls Variable(n) vorhanden mache das sonst mache dies
 
Die mathematische Grundlage dieser Formel ist der Cosinussatz: c²=a²+b²-2*a*b*cos(Gamma). Ich denke doch, dass ich richtig umgestellt habe...

edit: Ich hab falsch umgestellt. Es müsste sein:


c²=a²+b²-2*a*b*Cos(Gamma) | /(2ab)
c²/(2ab)=(a²+b²)/(2ab)+Cos(Gamma) | -(a²+b²)/(2ab)
(c²-a²-b²)/(2ab)=Cos(Gamma) | arccos
Gamma = arccos((c²-a²-b²)/(2ab))

So richtig?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz