Autor Beitrag
Lukifreeman
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 19.12.07 09:52 
was mach ich falsch das er bei dem editfenster ne variable ausgibt obwohl nix häckchen drin is??


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:
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 user profile iconAXMD: Delphi-Tags hinzugefügt
Moderiert von user profile iconAXMD: Topic aus Gemeinschaftsprojekte verschoben am Mi 19.12.2007 um 09:10
Einloggen, um Attachments anzusehen!
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: 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
ausblenden volle Höhe 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:
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)); //oder so mit function

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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: 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:

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mi 19.12.07 10:16 
user profile iconLukifreeman 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Mi 19.12.07 10:32 
Hi
Warum benutzt du keine Functions ?
Statt

ausblenden 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

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Function volumen(a2:real): Real; // bzw. Double  
begin  
  Result:=a2*a2*a2;  
end;  

if checkbox4.checked=true then edit7.text:=floattostr(volumen(a2));


und noch besser mit Formatfloat..
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 19.12.07 10:40 
user profile iconoldmax hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
if checkbox4.checked=true then edit7.text:=floattostr(volumen(a2));					
Vergleich du nicht auch noch einen Booleanwert auf true :lol:
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:
ausblenden Delphi-Quelltext
1:
if not Checkbox1.Checked then //Checkbox hat keinen Haken!					

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 :mrgreen:
Viel Erfolg noch, Lukifreeman ;)

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Mi 19.12.07 15:02 
Hi
Das kommt davon, wenn man mal eben in der Pause so darüberfliegt.... :oops:
und da ich's mir einfach mit C/P gemacht habe, auch noch dieser dumme lapsus mit dem true und false....
:shock:
Sorry.. beim nächsten mal les ich wieder, und überflieg es nicht nur.
Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....
Lukifreeman Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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?

ausblenden volle Höhe 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:
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 user profile iconAXMD: Delphi-Tags hinzugefügt


Zuletzt bearbeitet von Lukifreeman am Mi 19.12.07 19:27, insgesamt 1-mal bearbeitet
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Mi 19.12.07 21:42 
user profile iconLukifreeman 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 :P
ausblenden 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:
ausblenden Delphi-Quelltext
1:
Edit1.Text := IntToStr (x);					


Oder so:
ausblenden 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 :lupe:!

_________________
Die Lösung ist nicht siebzehn.
Lukifreeman Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 19.12.07 21:47 
ähm ist eine function

ausblenden 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 user profile iconAXMD: Delphi-Tags hinzugefügt
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Do 20.12.07 05:33 
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Do 20.12.07 09:01 
user profile iconLukifreeman 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
Edit10.Text:='0';					

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
ausblenden Delphi-Quelltext
1:
Function Volumen(a2: Double):Double;					

und dann
ausblenden 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
ausblenden 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....