Autor Beitrag
Tony-S
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 184
Erhaltene Danke: 6

Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
BeitragVerfasst: Fr 24.04.09 19:24 
Hallo Community, ich arbeite zur Zeit an einem Programm welches alle Berechnungen von Körpern und Formen beeinhaltet.
Es soll Alles zu Allem rechnen können, d.h., wenn ich bei einem Quadrat nur A gegeben habe, soll es mir direkt
auch e, U, und e berechnen.

Dafür wollte ich die Bedingung nutzen das die jeweils drei leeren Textfelder die Bedingung für die jeweils umgestellte Formel ist.
Mein Problem ist eigentlich nur das icht nicht weiß wie ich meinem Programm sage, das das Textfeld wirklich leer ist.

So wollte ich das lösen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
if  (TF_e_Q.Text<>''or      (TF_FL_Quadrat.Text<>''or (TF_U_Q.Text<>''then
     // Das Textfeld
     // für die Diagonale "e" // für die Fläche A         // für den Umfang U

// daraus ergibt sich ja das in diesem Falle nur etwas im Textfeld für die Seite a drinn steht.
begin
     A_Q:= a * a;
     U_Q:= a * 4;
     e_Q:= a*sqrt(2);

     TF_Fl_Quadrat.Text:= FloatToStr(A_Q);
     TF_e_Q.Text:= FloatToStr(e_Q);
     TF_U_Q.Text:= FloatToStr(U_Q);

end;
Ich bekomme den Fehler das '' kein Fließkommawert ist.
Es wäre sehr nett von euch, wenn ihr mir einen Rat geben könntet wie ich mein Problem lösen kann. Thx.

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 24.04.09 19:27 
Nimm lieber TryStrToFloat. ;-)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var
  a, b: Single;
...
if TryStrToFloat(TF_e_Q.Text, a) and TryStrToFloat(TF_FL_Quadrat.Text, b) ... then
  ... a und b benutzen
Tony-S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 184
Erhaltene Danke: 6

Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
BeitragVerfasst: Fr 24.04.09 19:41 
Danke für deine schnelle Antwort, du bist ja fix, btw kannte ich den Befehl bis gerade eben noch nicht ^^.


Ich bekomm jetzt den Fehler, "there is no overloaded version of 'TryStrToFloat' that can be called with this arguments"
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if TryStrToFloat(TF_e_Q.Text, e_Q) and TryStrToFloat(TF_FL_Quadrat.Text, A_Q) and TryStrToFloat(TF_U_Q.Text, U_Q) then
begin
   A_Q:= a * a;
   U_Q:= a * 4;
   e_Q:= a*sqrt(2);

   TF_Fl_Quadrat.Text:= FloatToStr(A_Q);
   TF_e_Q.Text:= FloatToStr(e_Q);
   TF_U_Q.Text:= FloatToStr(U_Q);
end;

Was ist denn da noch falsch, ich hääte zunächst einmal gedacht ich müsste als L.-Operator "or" nehmen, da es ja vorkommt,
das mehr als nur eine Eingabe vorhanden ist, aber vllt versteh ich da was falsch.

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 24.04.09 19:45 
Was für ein Typ ist denn s_Q usw.? Wenn das Variablen vom Typ Double sind, dann sollte das so klappen.

Ja, or ist bei deinem ursprünglichen Code richtig, wenn du nach diesem if die weitere Berechnung abbrichst.

Nebenbei sind Unterstriche eher nicht so schön in Variablen und anderen Bezeichnern. Das ist natürlich kein Muss, aber du könntest dir einmal den Styleguide anschauen. ;-)
dn.codegear.com/article/10280 (englisch)
www.delphi-treff.de/delphi-styleguide/ (deutsch)
Tony-S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 184
Erhaltene Danke: 6

Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
BeitragVerfasst: Fr 24.04.09 19:56 
Die Variablen sind alle Real müsste ja korrekt sein, nicht?

Naja finde Unterstriche ganz ok, weil sich das auch schnell so schreibt ^^.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 24.04.09 20:25 
user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:
Die Variablen sind alle Real müsste ja korrekt sein, nicht?
Real entspricht zwar Double, ist aber bei TryStrToFloat nicht berücksichtigt worden. Nimm also Double, das ist ja vom Datentyp her das selbe.

user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:
Naja finde Unterstriche ganz ok, weil sich das auch schnell so schreibt ^^.
Das schon, aber schnell und gut lesbar finde ich das nicht.
Ich nehme lieber sowas wie edtVolume, edtCircleDiameter, ... und für das Formular frmMain, ...

Wobei es aber immerhin schon gut ist, dass du sie überhaupt bezeichnest. ;-)
Tony-S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 184
Erhaltene Danke: 6

Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
BeitragVerfasst: Fr 24.04.09 21:48 
Ok hab jetzt mal Double genommen, es tritt nun kein Fehler mehr auf.

Aber ein neues Problem, wenn ich 2 der 4 Textfelder mit einer Zahl (egal welche)
fülle und meine Prozedur aufrufe erhalte ich für


A = 0
e = 2,9650301940214E-307
U = 8,38637182646159E-307

Also e stimmt ja noch fast (es wäre 2,8 ) bei einer Seitenlänge von a = 2 aber der Rest kann ja mal gar nicht stimmen.
Habe auch mal anstatt and, or genommen, selber Fehler.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TFrm_Viereck.Btn_QuadratClick(Sender: TObject);
var
a: Double;
A_Q:Double;
e_Q:Double;
U_Q:Double;
begin
if TryStrToFloat(TF_e_Q.Text, e_Q) or TryStrToFloat(TF_FL_Quadrat.Text, A_Q) or TryStrToFloat(TF_U_Q.Text, U_Q) then
begin
   A_Q:= a * a;
   U_Q:= a * 4;
   e_Q:= a*sqrt(2);

   TF_Fl_Quadrat.Text:= FloatToStr(A_Q);
   TF_e_Q.Text:= FloatToStr(e_Q);
   TF_U_Q.Text:= FloatToStr(U_Q);
end;
end;

Das ist die prozedur mal im ganzen. Hab ich da einen Fehler?

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 24.04.09 21:54 
Ach jetzt sehe ich erst was du eigentlich vor hast. Da musst du aber ja unterscheiden welche Angaben gegeben sind. Wie das geht habe ich vor ein paar Tagen erst korrigiert:
www.delphi-forum.de/....php?p=558828#558828
Tony-S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 184
Erhaltene Danke: 6

Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
BeitragVerfasst: Fr 24.04.09 22:05 
Sorry aber da blick ich nicht wirklich durch was da was macht... :0

Naja die Unterscheidung wollte ich ja machen damit lösen, das ich angeben welche Textfelder leer sind also ''.
Was muss ich denn an meinem Beispiel ändern damit ich wenn nur a gegeben ist, die 3 übrigen Werte erhalte, weil dort blick ich nicht sooo sehr durch.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 24.04.09 22:08 
Du musst schauen wo etwas drin steht. Wenn du mit TryStrToInt feststellst, dass in A etwas drin steht, dann berechnest du daraus die anderen Werte, sonst wenn in U etwas drin steht, dann berechnest du daraus die anderen Werte, ...
Und am Ende gibst du die eben aus.
Tony-S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 184
Erhaltene Danke: 6

Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
BeitragVerfasst: Fr 24.04.09 22:09 
Das habe ich doch, oder etwa nicht ;-)

Es kommen wie gesagt nur Werte raus, wenn ich 2 Textfelder befülle, und auch immer nur derselbe Wert.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

SORRY blöder fehler meinerseits,
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if TryStrToFloat(TF_a_Quadrat.Text, a)  then
begin
   A_Q:= a * a;
   U_Q:= a * 4;
   e_Q:= a*sqrt(2);

   TF_Fl_Quadrat.Text:= FloatToStr(A_Q);
   TF_e_Q.Text:= FloatToStr(e_Q);
   TF_U_Q.Text:= FloatToStr(U_Q);
end;
so stimmts wohl :)
hatte nur die flasche variable ... danke dir erstmal, vllt hab ich ja noch Fragen ;-)
Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
freak4fun
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: Fr 24.04.09 23:12 
OT: Tony-S, benutze doch bitte Delpi-Tags. :)

_________________
"Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen