| Autor |
Beitrag |
Tony-S
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: 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:
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 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 Narses: Delphi-Tags hinzugefügt
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 24.04.09 19:27
|
|
Tony-S 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: 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"
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 Narses: Delphi-Tags hinzugefügt
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: 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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 24.04.09 20:25
Tony-S hat folgendes geschrieben : | | 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.
Tony-S hat folgendes geschrieben : | | 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 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: 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.
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 Narses: Delphi-Tags hinzugefügt
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: 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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: 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 Narses: Beiträge zusammengefasst---
SORRY blöder fehler meinerseits,
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 Narses: Delphi-Tags hinzugefügt
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: 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
|
|
|