Autor |
Beitrag |
Lukifreeman
Hält's aus hier
Beiträge: 10
|
Verfasst: Mi 19.12.07 09:52
was mach ich falsch das er bei dem editfenster ne variable ausgibt obwohl nix häckchen drin is??
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:
| procedure volumen(a2:real;var v2:real); begin v2:=a2*a2*a2; end;
procedure oberflaeche(a2:real;var o2:real); begin o2:=6*a2*a2; end;
procedure matelflaeche(a2:real;var m2:real); begin m2:=a2*a2; end;
procedure TForm1.Button6Click(Sender: TObject); var a2:real; v2,o2,m2:real;
begin a2:=strtofloat(edit10.text);
if checkbox4.checked=true then volumen(a2,v2); edit7.text:=floattostr(v2);
if checkbox5.checked=true then volumen(a2,o2); edit8.text:=floattostr(o2);
if checkbox6.checked=true then matelflaeche(a2,m2); edit9.text:=floattostr(m2); |
end;
end.
Moderiert von AXMD: Delphi-Tags hinzugefügtModeriert von AXMD: Topic aus Gemeinschaftsprojekte verschoben am Mi 19.12.2007 um 09:10
Einloggen, um Attachments anzusehen!
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mi 19.12.07 10:10
(a) verwende bitte Delphi-Tags
(b) rücke deine Quellen ein
(c) ev. wären Funktionen für Volumen und Oberfläche besser geeignet
(d) verwende Double statt real(veraltet)
(e) boolsche Vergleich ohne =True/=False
(f) bei mehr als einer Anweisung in IfThenElse begin und end verwenden
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: 31: 32: 33: 34: 35: 36:
| function volumen(a2: Double): Double; begin Result := a2*a2*a2; end;
function oberflaeche(a2:Double): Double; begin Result := 6*a2*a2; end;
function mantelflaeche(a2:Double): Double; begin Result := 4*a2*a2; end;
procedure TForm1.Button6Click(Sender: TObject); var a2:real; v2,o2,m2:real;
begin a2 := StrTofloat(edit10.text);
if checkbox4.checked then begin V2 := Volumen(a2); edit7.text := FloatToStr(v2); end; if checkbox5.checked then begin O2 := Oberflaeche(a2); edit8.text := FloatToStr(o2); end; if checkbox6.checked then Edit9.text := FloattoStr(Mantelflaeche(a2)); end; |
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Mi 19.12.07 10:13
Hallo!
Du musst den Teil, der ausgeführt werden soll, wenn die Bedingung zutrifft, mit begin und end einschließen. Also beispielsweise so:
Delphi-Quelltext 1: 2: 3: 4: 5:
| if checkbox6.checked=true then begin matelflaeche(a2,m2); edit9.text:=floattostr(m2); end; |
Es reicht übrigens, nur checkbox6.checked zu schreiben, das true brauchst du hier gar nicht
AXMD
|
|
Lukifreeman 
Hält's aus hier
Beiträge: 10
|
Verfasst: Mi 19.12.07 10:13
wie sollte denn die funktion für den würfel beispielsweise aussehen?
und das mit dem begin und end immer machen?
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mi 19.12.07 10:16
Lukifreeman hat folgendes geschrieben: | wie sollte denn die funktion für den würfel beispielsweise aussehen?
und das mit dem begin und end immer machen? |
(a) Augen auf
(b) nur bei mehr als einer Anweisung!
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Mi 19.12.07 10:32
Hi
Warum benutzt du keine Functions ?
Statt
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure volumen(a2:real;var v2:real); begin v2:=a2*a2*a2; end;
if checkbox4.checked=true then volumen(a2,v2); edit7.text:=floattostr(v2); |
geht's doch so etwas übersichtlicher zu
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| Function volumen(a2:real): Real; begin Result:=a2*a2*a2; end;
if checkbox4.checked=true then edit7.text:=floattostr(volumen(a2)); |
und noch besser mit Formatfloat..
Delphi-Quelltext 1:
| if checkbox4.checked=true then edit7.text:=FormatFloat('#0.000',volumen(a2)); |
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mi 19.12.07 10:36
@oldmax Hast Du meine Beiträge gelesen  , 
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mi 19.12.07 10:40
oldmax hat folgendes geschrieben: | Delphi-Quelltext 1:
| if checkbox4.checked=true then edit7.text:=floattostr(volumen(a2)); | |
Vergleich du nicht auch noch einen Booleanwert auf true
Was glaubst du denn, welcher Datentyp bei einem Vergleich rauskommt? Was kann "a = 1" denn sein? Nur Wahr oder Falsch, also ein Boolean
Sprich: Ob ich nun schreibe if a = b then oder if (((a = b) = true) = true) = true then macht nur einen Unterschied: Ersteres ist übersichtlicher  Also: Wenn du einen Boolean hast, wie CheckboxX.Checked, dann lass den = true Vergleich weg
Genauso kannst du = false mit not ersetzen:
Delphi-Quelltext 1:
| if not Checkbox1.Checked then |
Das ist jetzt übrigens auch schon 2 mal in diesem Thread angesprochen worden, genauso wie die Sache mit den Funktionen statt Prozeduren mit Var Parameter
Viel Erfolg noch, Lukifreeman 
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Mi 19.12.07 15:02
Hi
Das kommt davon, wenn man mal eben in der Pause so darüberfliegt....
und da ich's mir einfach mit C/P gemacht habe, auch noch dieser dumme lapsus mit dem true und false....
Sorry.. beim nächsten mal les ich wieder, und überflieg es nicht nur.
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
Lukifreeman 
Hält's aus hier
Beiträge: 10
|
Verfasst: Mi 19.12.07 18:30
wie seid ihr eigentlich auf das result gekommen?
weil @ school hatten wir das noch nicht?
jetz bin ich beim berechnen der kugel der zeigt mir aber für r4 undefinierter bezeicher wiso?
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: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63:
| function volumen2(a2: Double): Double; begin Result := a2*a2*a2; end;
function oberflaeche2(a2:Double): Double; begin Result := 6*a2*a2; end;
function mantelflaeche2(a2:Double): Double; begin Result := a2*a2; end;
procedure TForm1.Button6Click(Sender: TObject); var a2:real; v2,o2,m2:real;
begin a2 := StrTofloat(edit10.text);
if checkbox4.checked then begin V2 := Volumen2(a2); edit7.text := FloatToStr(v2); end; if checkbox5.checked then begin O2 := Oberflaeche2(a2); edit8.text := FloatToStr(o2); end; if checkbox6.checked then begin m2:=mantelflaeche2(a2); Edit9.text := FloattoStr(m2); end; end;
function volumen4(a4: Double): Double; begin Result := (4*pi*r4*r4*r4)/3; end;
procedure TForm1.Button12Click(Sender: TObject); var r4:real; v4,o4,d4:real; begin r4:=strtofloat(edit20.text); if checkbox12.checked then begin V4 := Volumen4(r4); edit20.text := FloatToStr(v4); end;
end;
end. |
Moderiert von AXMD: Delphi-Tags hinzugefügt
Zuletzt bearbeitet von Lukifreeman am Mi 19.12.07 19:27, insgesamt 1-mal bearbeitet
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mi 19.12.07 19:25
in dem wir uns mit Grundlagen beschäftig haben 
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Lukifreeman 
Hält's aus hier
Beiträge: 10
|
Verfasst: Mi 19.12.07 21:03
so das programm läuft einwandfrei:-)
jetz hab ich bloß 3 fragen
1. warum kann man das true weglassen bei der checkbox?
2. warum da result steht? (mit welcher begründung)
3. wenn keine häckchen sind das er keine beliebigen werte ausgibt?
muss ja meinem lehrer irgentwie erklären wie ich drauf gekommen bin
|
|
Mitmischer 1703
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Mi 19.12.07 21:42
Lukifreeman hat folgendes geschrieben: | so das programm läuft einwandfrei:-)
jetz hab ich bloß 3 fragen
1. warum kann man das true weglassen bei der checkbox?
2. warum da result steht? (mit welcher begründung)
3. wenn keine häckchen sind das er keine beliebigen werte ausgibt?
muss ja meinem lehrer irgentwie erklären wie ich drauf gekommen bin |
1. Weil es ein Boolean ist, und die Delphi-Programmierer schlau waren!
2. Result in einer Funktion ersetzt dir das Schreiben von Funktionsname := blalala => Kannst du so schreiben: Result := blalala. Du kannst es aber auch anders machen
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure bla (var x: Integer); begin Sleep (500); x := x+1; end; |
Dann kannst du mit x arbeiten:
Delphi-Quelltext 1:
| Edit1.Text := IntToStr (x); |
Oder so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| function buhlala : Integer begin Sleep (500) return x+1 end; Edit1.Text := IntToStr (buhlala) |
Prozedur oder Funktion??!!
An 3. arbeite ich noch  !
_________________ Die Lösung ist nicht siebzehn.
|
|
Lukifreeman 
Hält's aus hier
Beiträge: 10
|
Verfasst: Mi 19.12.07 21:47
ähm ist eine function
Delphi-Quelltext 1: 2: 3: 4: 5:
| if checkbox5.checked then begin o2:=oberflaeche2(a2); edit8.text:=floattostr(o2); end; |
das wenn nicht checked und ich trotzdem auf berechnen gehe er nich irgenteine zahl anzeigt
Moderiert von AXMD: Delphi-Tags hinzugefügt
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Do 20.12.07 05:33
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| if checkbox5.checked then begin o2:=oberflaeche2(a2); edit8.text:=floattostr(o2); end else Edit8.Text := 'nicht berechnet'; |
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Lukifreeman 
Hält's aus hier
Beiträge: 10
|
Verfasst: Do 20.12.07 08:38
wenn ich das mit dem else mache geht er aber wieder hoch und zeigt bei a2 kein gültigen fließkomatawert oder so
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Do 20.12.07 09:01
Lukifreeman hat folgendes geschrieben: | wenn ich das mit dem else mache geht er aber wieder hoch und zeigt bei a2 kein gültigen fließkomatawert oder so |
nein
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Do 20.12.07 14:27
Hi
Hmmmm, auch wenn ich mal wieder was überlesen haben sollte:
a2 Wert ist Wert aus Edit10.text und wenn da Müll drin steht, ist der Fehler nicht bei der Zuweisung von Edit8.Text zu suchen.
Also, es macht Sinn, Edit10.Text auf jeden Fall vorzubesetzen, z. B. in FormCreate
Delphi-Quelltext
Des weiteren ist vielleicht das Abfangen von unzulässigen Zeichen also alles was keine Zahl oder 1 !! Komma ist. Das geht in OnKeyPress, oder du nimmst ein TMaskEdit, das sollte auch ein Copy/Paste verhindern, oder du nimmst andere Wandlungen, die bei Fehler nicht gleich das Programm anhalten und dir die Möglichkeit geben, diese falsche Eingabe zu korrigieren.
Außerdem würde dir gewaltig helfen, bei der Vergabe von Variablennamen ein wenig mehr Info reinzupacken. Z.B. Edit9.Text, Edit8.Text usw ist zwar sehr bequem, aber ein Ed_VolumenQuader.Text hilft dir bei umfangreichen Formularen auch eine richtige Zuweisung zu geben. Wobei ED_ ein Präfix für Edit, ein PN_ für Panel, ein CB_ für Checkbox usw. sein könnte.
Es ist auch nicht unbedingt sinnvoll, den Übergabeparameter nach einer globalen Variable zu benennen
Delphi-Quelltext 1:
| Function Volumen(a2: Double):Double; |
und dann
Delphi-Quelltext 1:
| a2:=StrtoFloat(Edit10.Text); |
Da mußt du ja ins Schleudern kommen, denn vermutlich ist a2 einmal global in der Variablentabelle deklariert und einmal lokal als Parameter der Function.
( das wir es auch mit benutzt haben liegt an Copy/Paste deines Quelltextes )
Da sind z.B. Möglichkeiten gegeben wie
Delphi-Quelltext 1: 2: 3: 4:
| Hoehe: Double; Breite: Double; Durchmesser : Double; Radius etc.... |
Die Zeit der eingeschränkten Variablennamen ist vorbei, lediglich muß man sich vor reservierten Bezeichnern in acht nehmen.
Ich denke, grad Anfänger begehen den Fehler, schreibfaul zu sein um dann irgendwann mit viel Arbeit durch den "Spaghetticode" zu stolpern.
Daher auch die mit Doppelslash eingeleiteten Kommentarzeilen nutzen und wichtiges kommentieren
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|