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 public end;
var main: Tmain;
implementation
{$R *.dfm}
procedure Tmain.btn_closeClick(Sender: TObject); begin
close; end;
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;
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;
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;
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;
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;
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. |
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

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
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Alles klar. Vielen Dank. Es hat funktioniert!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!