Autor Beitrag
DaRee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mi 19.03.08 14:28 
Tachjen,

Also als erstes muss ich sagen, ich hab das internet durchsucht und auch hier im forum gesucht aber irgendwie nichts gefunden, was ich wirklich erstaunlich finde. Ich möchte ein Dreiecks berechner programmieren. Ich habe 6 Editfelder (3 seiten, 3 Winkel wobei Gamma immer 90° ist) und wenn ich z.B. a und b und gamma gegeben habe, müsste ich c locker mit dem Cosinussatz berechnen können, aber das macht er nicht.

ausblenden 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:
24:
25:
26:
27:
28:
var
Form7: TForm7;
a, b, c, Alpha, Beta, Gamma : Double;

procedure TForm7.FormCreate(Sender: TObject);
begin
 Form7.Top     := 125;
 Form7.left    := 200;
 Form7.Height  := 630;
 Form7.Width   := 980;

 a     := StrToFloat('0');
 b     := StrToFloat('0');
 c     := StrToFloat('0');
 Alpha := StrToFloat('0');
 Beta  := StrToFloat('0');
end;

procedure TForm7.BtnRechnenClick(Sender: TObject);
begin
 a      := StrToFloat(Lbla.Caption);
 b      := StrToFloat(Lblb.Caption);
 c      := StrToFloat(Lblc.Caption);
 Alpha  := StrToFloat(LblAlpha.Caption);
 Beta   := StrToFloat(LblBeta.Caption);
 Gamma  := StrToFloat(LblGamma.Caption);

 c := sqrt(a*a + b*b);


Okay, da habe ich jetzt nicht den Cosinussatz benutzt sondern Phytagoras, aber naja geht beides nicht. Fehlermeldung ist:
In Projektbalabla.exe ist eine Exception der klasse EConvertError aufgetreten. Meldung '''Ist kein gültiger gleitkommawert'.

Danke schonmal!
opfer.der.genauigkeit
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



BeitragVerfasst: Mi 19.03.08 14:38 
user profile iconDaRee hat folgendes geschrieben:
In Projektbalabla.exe ist eine Exception der klasse EConvertError aufgetreten. Meldung '''Ist kein gültiger gleitkommawert'.


Dann wandelst du irgendwo einen leeren String in einen Float um.
Setz mal 'n Breakpoint und schau, welches StrToFloat scheitert.

_________________
Stellen Sie sich bitte Zirkusmusik vor.
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mi 19.03.08 14:44 
Da braucht er keinen Breakpoint setzen. Da es wohl ziemlich sicher ist, dass er eines der Felder nicht ausgefüllt hat, da er den Wert ja berechnen will ;-). Mach es z.B. so:

ausblenden Delphi-Quelltext
1:
C := StrToFloatDef(Edit1.Text, 0);					


Dann bekommt C automatisch den Wert 0, wenn in Edit1 keine Zahl steht. Allerdings musst du das Konzept ein wenig ändern, da du ja den User entscheiden lassen willst, welcher Wert berechnet werden soll. Also z.B. gucken welches Feld leer ist.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
opfer.der.genauigkeit
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



BeitragVerfasst: Mi 19.03.08 14:53 
Mag sein, dass es sicherer ist mit default Werten zu arbeiten, aber ein Dreieck mit einem Winkel oder eine Strecke von 0?

Zudem wollte ich eigentlich noch unterschwellig dein Debugger als Standardwerkzeug andeuten. ^^

//Edit: Def, wenn der Wert fehlt und berechnet werden soll, dann ergibt es auch wieder Sinn.

_________________
Stellen Sie sich bitte Zirkusmusik vor.
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mi 19.03.08 16:36 
(a) solange Du in TForm7 bist, kannst Du das Form7 weglassen
(b) die Variablen sollten zu TForm7 gehören und mit einem F beginnen (StyleGuide)!
(c) Du musst die einzelnen Fälle austesten, siehe Beispiel
ausblenden 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:
24:
25:
26:
27:
28:
29:
30:
var
Form7: TForm7;
a, b, c, Alpha, Beta, Gamma : Double;

procedure TForm7.FormCreate(Sender: TObject);
begin
 Top := 125;
 Left := 200;
 Height  := 630;
 Width   := 980;

 a := 0//reicht auch
 b := 0;
 c := 0;
 Alpha := 0;
 Beta  := 0;
Gamma := 0;
end;

procedure TForm7.BtnRechnenClick(Sender: TObject);
begin
 a      := StrToFloatDef(Lbla.Caption,0);
 b      := StrToFloatDef(Lblb.Caption,0);
 c      := StrToFloatDef(Lblc.Caption,0);
 Alpha  := StrToFloatDef(LblAlpha.Caption,0);
 Beta   := StrToFloatDef(LblBeta.Caption,0);
 Gamma  := StrToFloatDef(LblGamma.Caption,,0);
 if (a=0and (b=0and (Gamma=90then c := sqrt(a*a + b*b);
 //zBsp
end;

TIPP: vielleicht kommst Du günstiger, wenn Du die 4 Kongruenzfälle anbietest und die Labels entsprechend beschriftest
FRAGE: der Eingabewert in Labels.Caption ?

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!