Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Kreisrechner Problem


CxxxB - So 25.11.12 18:49
Titel: Kreisrechner Problem
Guten Tag,
ich sitze nun schon seit einer ganzen Weile fest an meinem Kreisrechner.
Ganz einfach gesagt, der Rechner funktioniert nicht so, wie er sollte.
Er rechnet meistens gar nichts aus und manchmal ändert er meine eingegebene Beträge, die er dann berechnen sollte.
Ich weiß leider nicht mehr weiter, ich habe es versucht mit Checkboxen zu umgehen, dennoch klappt es weiterhin nicht.
Ich hoffe ihr könnt mir helfen.
Auf Wunsch stelle ich das Projekt rein.
Hier erst einmal der Quellcode:


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:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
unit Kreisrechner;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  Tmain = class(TForm)
    lb_radius: TLabel;
    lb_durchmesser: TLabel;
    lb_umfang: TLabel;
    lb_Flaeche: TLabel;
    pnl_ueberschrift: TPanel;
    edt_Radius: TEdit;
    edt_durchmesser: TEdit;
    edt_umfang: TEdit;
    btn_close: TButton;
    edt_flaeche: TEdit;
    btn_clear: TButton;
    btn_berechnen: TButton;
    rb_radius: TRadioButton;
    rb_Flaeche: TRadioButton;
    rb_Umfang: TRadioButton;
    rb_durchmesser: TRadioButton;
    procedure btn_closeClick(Sender: TObject);
    procedure btn_berechnenClick(Sender: TObject);
    procedure btn_clearClick(Sender: TObject);
    procedure rb_radiusClick(Sender: TObject);
    procedure rb_FlaecheClick(Sender: TObject);
    procedure rb_UmfangClick(Sender: TObject);
    procedure rb_durchmesserClick(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  main: Tmain;

implementation

{$R *.dfm}

procedure Tmain.btn_closeClick(Sender: TObject);
 begin

   close;
   
 end(*End - Prozess*)

procedure Tmain.btn_clearClick(Sender: TObject);
 begin

   edt_Radius.Clear ;
   edt_Flaeche.Clear ;
   edt_Umfang.Clear ;
   edt_Durchmesser.Clear ;

   edt_Radius.Enabled := False  ;
   edt_Radius.Color := cl3DLight ;

   edt_Flaeche.Enabled := False ;
   edt_Flaeche.Color := cl3DLight ;

   edt_Umfang.Enabled := False ;
   edt_Umfang.Color := cl3DLight ;

   edt_Durchmesser.Enabled := False ;
   edt_Durchmesser.Color := cl3DLight ;

   rb_Radius.Checked := False ;
   rb_Flaeche.Checked := False ;
   rb_Umfang.Checked := False ;
   rb_Durchmesser.Checked := False ;

 end;  (*End - Prozess*)


procedure Tmain.btn_berechnenClick(Sender: TObject);

var Radius, Flaeche, Umfang, Durchmesser      : real ;


 begin

  try

   If rb_Radius.Checked then

    Radius := StrToFloat (edt_radius.Text) ;

    Flaeche := (Pi) * sqr(Radius) ;
     edt_Flaeche.Text := FloatToStr (Flaeche) ;

    Umfang := sqr(Pi) * Radius ;
     edt_Umfang.Text := FloatToStr (Umfang)  ;

    Durchmesser := Radius + Radius ;
     edt_durchmesser.Text := FloatToStr(Durchmesser) ;

   If rb_Flaeche.Checked then

    Flaeche := StrToFloat (edt_Flaeche.Text) ;

    Radius := sqrt(Flaeche) / sqrt(Pi) ;
     edt_Radius.Text := FloatToStr (Radius) ;

    Umfang := 2*sqrt(Pi * Flaeche) ;
     edt_Umfang.Text := FloatToStr (Umfang)  ;

    Durchmesser := 2 * sqrt(Flaeche) / sqrt(Pi) ;
     edt_durchmesser.Text := FloatToStr (Durchmesser) ;


   If rb_Umfang.Checked  then

    Umfang := StrToFloat (edt_Umfang.Text) ;

    Radius := Umfang / 2 / Pi;
     edt_Radius.Text := FloatToStr (Radius) ;

    Flaeche := Umfang / Pi ;
     edt_Flaeche.Text := FloatToStr (Flaeche) ;

    Durchmesser := Pi * sqr(Umfang / 2 / Pi) ;
     edt_durchmesser.Text := FloatToStr (Durchmesser) ;


   If rb_Durchmesser.Checked then

    Durchmesser := StrToFloat (edt_durchmesser.Text) ;

    Radius := Durchmesser / 2 / 2 ;
     edt_Radius.Text := FloatToStr (Radius) ;

    Flaeche := Durchmesser * Pi ;
     edt_Flaeche.Text := FloatToStr (Flaeche) ;

    Umfang := Pi * sqr( Durchmesser / 2 / Pi) ;
     edt_Umfang.Text := FloatToStr (Umfang) ;

  except

   showmessage ('Es wurde keine Zahl eingegeben !') ;

  end ;  (*End - try/except*)

 end;  (*End - Prozess*)


procedure Tmain.rb_radiusClick(Sender: TObject);
 begin

   edt_Radius.Clear ;
   edt_Flaeche.Clear ;
   edt_Umfang.Clear ;
   edt_Durchmesser.Clear ;

   edt_Radius.Enabled := False  ;
   edt_Radius.Color := cl3DLight ;

   edt_Flaeche.Enabled := False ;
   edt_Flaeche.Color := cl3DLight ;

   edt_Umfang.Enabled := False ;
   edt_Umfang.Color := cl3DLight ;

   edt_Durchmesser.Enabled := False ;
   edt_Durchmesser.Color := cl3DLight ;


  edt_Radius.Color := clWindow ;
  edt_Radius.Enabled := True ;
  edt_Radius.ReadOnly := False ;

  edt_Flaeche.Enabled := True ;
  edt_Umfang.Enabled := True ;
  edt_Durchmesser.Enabled := True ;

 end(*End - Prozess*)



procedure Tmain.rb_FlaecheClick(Sender: TObject);
 begin

   edt_Radius.Clear ;
   edt_Flaeche.Clear ;
   edt_Umfang.Clear ;
   edt_Durchmesser.Clear ;

   edt_Radius.Enabled := False  ;
   edt_Radius.Color := cl3DLight ;

   edt_Flaeche.Enabled := False ;
   edt_Flaeche.Color := cl3DLight ;

   edt_Umfang.Enabled := False ;
   edt_Umfang.Color := cl3DLight ;

   edt_Durchmesser.Enabled := False ;
   edt_Durchmesser.Color := cl3DLight ;


  edt_Flaeche.Color := clWindow ;
  edt_Flaeche.Enabled := True ;
  edt_Flaeche.ReadOnly := False ;

  edt_Radius.Enabled := True ;
  edt_Umfang.Enabled := True ;
  edt_Durchmesser.Enabled := True ;

 end;  (*End - Prozess*)

procedure Tmain.rb_UmfangClick(Sender: TObject);
 begin

   edt_Radius.Clear ;
   edt_Flaeche.Clear ;
   edt_Umfang.Clear ;
   edt_Durchmesser.Clear ;

   edt_Radius.Enabled := False  ;
   edt_Radius.Color := cl3DLight ;

   edt_Flaeche.Enabled := False ;
   edt_Flaeche.Color := cl3DLight ;

   edt_Umfang.Enabled := False ;
   edt_Umfang.Color := cl3DLight ;

   edt_Durchmesser.Enabled := False ;
   edt_Durchmesser.Color := cl3DLight ;


  edt_Umfang.Color := clWindow ;
  edt_Umfang.Enabled := True ;
  edt_Umfang.ReadOnly := False ;

  edt_Radius.Enabled := True ;
  edt_Flaeche.Enabled := True ;
  edt_Durchmesser.Enabled := True ;

 end(*End - Prozess*)

procedure Tmain.rb_durchmesserClick(Sender: TObject);
 begin

   edt_Radius.Clear ;
   edt_Flaeche.Clear ;
   edt_Umfang.Clear ;
   edt_Durchmesser.Clear ;

   edt_Radius.Enabled := False  ;
   edt_Radius.Color := cl3DLight ;

   edt_Flaeche.Enabled := False ;
   edt_Flaeche.Color := cl3DLight ;

   edt_Umfang.Enabled := False ;
   edt_Umfang.Color := cl3DLight ;

   edt_Durchmesser.Enabled := False ;
   edt_Durchmesser.Color := cl3DLight ;


  edt_Durchmesser.Color := clWindow ;
  edt_Durchmesser.Enabled := True ;
  edt_Durchmesser.ReadOnly := False ;

  edt_Radius.Enabled := True ;
  edt_Flaeche.Enabled := True ;
  edt_Umfang.Enabled := True ;

 end(*End - Prozess*)

end.


Ich hoffe ihr könnt mir da helfen und eventuell sogar die Fehler komplett beheben.
Wenn ihr nicht ganz versteht, was nun daran nicht funktioniert, lade ich gerne, wie schon gesagt, das Projekt hoch.


Narses - So 25.11.12 19:07

Moin!

Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien:
3.4 Frage formulieren - Der richtige Titel [http://www.entwickler-ecke.de/richtlinien.html]:
Formuliere den Betreff deiner Themen so, dass der Leser (und damit möglicherweise dein Helfer) anhand des Titels bereits weiß, worum es in diesem Topic geht. Titel wie z.B. "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" machen nicht neugierig auf mehr, ehrlich. Auch "HILFEEEE!!!!" hat sich bisher nicht bewährt. Wenn du ein Topic eröffnest ist es höchstwahrscheinlich, dass du Hilfe brauchst.
Einfach unten in deinem ersten Beitrag auf user defined image klicken und den Titel ändern. Danke dir!

Zum Thema selbst: Oft hilft es schon gewalting, wenn man sich mal genau vor Augen führt, was denn genau passieren soll. Vielleicht ist es auch eine gute Idee, wenn du das mal hier im Topic (da reichen ja schon Stichworte) beschreibst. :idea: Dann kann du im Nachgang nochmal erläutern, was bei deinem Ansatz jetzt nicht so funktioniert, wie es soll. Am Besten wären dann noch die Quelltext-Ausschnitte dazu passend ausgewählt präsentiert. Das hilft uns zu verstehen, wo dein Problem ist, und dir, den Fehler zu finden. ;)

Es ist sicher nicht Sinn der Sache, wenn wir sowohl rausfinden müssen, was dein Programm tun soll und dann auch noch die Fehler finden und beheben sollen. Was ist dann dein Teil an der Leistung dieser Aufgabe? :zwinker:

Wir helfen gerne, aber du musst auch deinen Teil dazu beitragen! :zustimm:

cu
Narses


Mathematiker - So 25.11.12 19:09

Hallo und :welcome:
außer, dass ich die ganzen Aktionen u.a. bei Tmain.btn_clearClick usw. nicht verstehe, hast Du auf jeden Fall den Denkfehler, dass nach einem then viele Anweisungen bis zum nächsten if-then ausgeführt werden.
Statt

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
   If rb_Radius.Checked then
    Radius := StrToFloat (edt_radius.Text) ;
    Flaeche := (Pi) * sqr(Radius) ;
     edt_Flaeche.Text := FloatToStr (Flaeche) ;
    Umfang := sqr(Pi) * Radius ;
     edt_Umfang.Text := FloatToStr (Umfang)  ;
    Durchmesser := Radius + Radius ;
     edt_durchmesser.Text := FloatToStr(Durchmesser) ;

musst Du die nachfolgenden Anweisungen mit begin und end einschließen, d.h.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
If rb_Radius.Checked then
   begin 
    Radius := StrToFloat (edt_radius.Text) ;
    Flaeche := (Pi) * sqr(Radius) ;
     edt_Flaeche.Text := FloatToStr (Flaeche) ;
    Umfang := sqr(Pi) * Radius ;
     edt_Umfang.Text := FloatToStr (Umfang)  ;
    Durchmesser := Radius + Radius ;
     edt_durchmesser.Text := FloatToStr(Durchmesser) ;
end;

Analog auch in den anderen Berechnungen.

Beste Grüße
Mathematiker


CxxxB - So 25.11.12 19:24

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Alles klar. Vielen Dank. Es hat funktioniert!