Entwickler-Ecke
Sonstiges (Delphi) - Delphi Taschenrechner Problem (Phänomen)
boboy162 - Mo 12.10.09 16:40
Titel: Delphi Taschenrechner Problem (Phänomen)
Hallo zusammen, bin neu hier und das ist mein erster Eintrag hier ^^
Also ich steh hier vor einem Problem das irgendwie für mich einfach nicht Nachvollziehbar ist, und das mir schon alle Nerven geraubt hat.
Problem: Ich gebe eine Zahl ein klicke dann auf Plus, und wenn ich jetzt den Zweiten Summanden sozusagen eintippen will, dann müsste er wenn ich die erste Ziffer eingebe sofort das edit1 Fenster löschen und dies durch die Ziffer ersetzen.
Gruß
und vielen Dank
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) BPlus: TButton; BMinus: TButton; BMal: TButton; BTeilen: TButton; BGleich: TButton; B7: TButton; B8: TButton; B6: TButton; B3: TButton; B4: TButton; B5: TButton; B1: TButton; BPunkt: TButton; B2: TButton; B9: TButton; BClear: TButton; Edit1: TEdit; B0: TButton;
procedure B1Click(Sender: TObject); procedure B2Click(Sender: TObject); procedure B3Click(Sender: TObject); procedure B4Click(Sender: TObject); procedure B5Click(Sender: TObject); procedure B6Click(Sender: TObject); procedure B7Click(Sender: TObject); procedure B8Click(Sender: TObject); procedure B9Click(Sender: TObject); procedure B0Click(Sender: TObject); procedure BGleichClick(Sender: TObject); procedure BPlusClick(Sender: TObject);
procedure richtigAnzeigen(text: string); procedure Zusammenrechnen(); procedure ProzessAntwortschonangezeigt();
private public end;
var Form1: TForm1; Ergebnis: double = 0; Operator: string = ''; Antwortschonangezeigt : integer = 0;
implementation
{$R *.dfm}
procedure TForm1.Zusammenrechnen(); Begin if Operator = '' then begin Ergebnis := strtofloat(edit1.Text); end; if Operator = '+' then begin Ergebnis := Ergebnis + strtofloat(edit1.Text); end; if Operator = 'x' then begin Ergebnis := Ergebnis * strtofloat(edit1.Text); end; if Operator = '/' then begin Ergebnis := Ergebnis / strtofloat(edit1.Text); end; if Operator = '-' then begin Ergebnis := Ergebnis - strtofloat(edit1.Text); end; end;
procedure TForm1.ProzessAntwortschonangezeigt(); begin Antwortschonangezeigt := 1; edit1.Text := floattostr(Ergebnis); end;
procedure TForm1.richtigAnzeigen(text: string); begin
if Antwortschonangezeigt = 1 then begin Antwortschonangezeigt := 0; edit1.text := '' ; end;
if edit1.Text = '0' then begin edit1.Text := ''; end; edit1.Text := edit1.Text + text;
end;
procedure TForm1.BPlusClick(Sender: TObject); begin
Zusammenrechnen();
Operator := '+';
ProzessAntwortschonangezeigt();
end;
procedure TForm1.BGleichClick(Sender: TObject); begin Zusammenrechnen();
Operator := '';
ProzessAntwortschonangezeigt();
end;
procedure TForm1.B1Click(Sender: TObject); begin richtigAnzeigen ('1');
end;
procedure TForm1.B2Click(Sender: TObject); begin richtigAnzeigen ('2');
end;
procedure TForm1.B3Click(Sender: TObject); begin richtigAnzeigen ('3');
end;
procedure TForm1.B4Click(Sender: TObject); begin richtigAnzeigen ('4');
end;
procedure TForm1.B5Click(Sender: TObject); begin richtigAnzeigen ('5');
end;
procedure TForm1.B6Click(Sender: TObject); begin richtigAnzeigen ('6');
end;
procedure TForm1.B7Click(Sender: TObject); begin richtigAnzeigen ('7');
end;
procedure TForm1.B8Click(Sender: TObject); begin richtigAnzeigen ('8');
end;
procedure TForm1.B9Click(Sender: TObject); begin richtigAnzeigen ('9');
end;
procedure TForm1.B0Click(Sender: TObject); begin richtigAnzeigen ('0');
end;
end. |
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
martin300 - Mo 12.10.09 17:10
Hallo,
eine Möglichkeit wäre folgendes:
Deine Methode Zusammenrechnen wird immer ausgeführt sobald ein Rechenoperation durchgeführt wird. Dort könnte auch noch eine Variable zb. "LoescheDisplay" gesetzt werden. Der nächste Schritt ist eine Eingabe der Buttons, die Methode richtigAnzeigen wird aufgerufen. Wenn du dort abfragen würdest ob "LoescheDisplay" gesetzt wurde, dann lösche die Anzeige und setzte "LoescheDisplay" auf false zurück;
Somit würde das gleiche Verhalten wie bei einem Taschenrechner erzeugt werden;
boboy162 - Mo 12.10.09 17:17
Ist das nicht das selbe wie Antwortschonangezeigt?
Gruß
---
Moderiert von
Narses: Beiträge zusammengefasst---
Also ich muss mich nochmal melden, aber das Problem hat sich wohl gelöst!!!^^
Einfach SOOOOOOOOOOO!!! ICH VERSTEH EINFACH NICHT WARUM SO GANZ PLÖtzlich, obwohl ich mich jetzt so recht erinnere und ich eigentlich nichts verändert habe.
Egal, zumindest trotzdem Danke für die Hilfe!
Gruß
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
martin300 - Mo 12.10.09 17:34
ok.
boboy162 - Mo 12.10.09 17:57
Ach neues Problem...
Wie kann ich die Hochzahlen ausrechnen?
Hab Zwei Zahlen. LetztesErgebnis und die Zahl die im Edit1 steht. .
Delphi-Quelltext
1:
| edit1.text := Power(letztesErgebnis, (strtofloat (edit1.Text))); |
Funktuniert aber irgendwie nicht.
Hmmmmmmmm
Edit: Ich glaub ich hab dieses Math Unit nicht.
Danke
Moderiert von
Narses: Delphi-Tags hinzugefügt
martin300 - Mo 12.10.09 18:09
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var x : Double; begin x := power(2,2); lbl1.Caption := FloatToStr(x); end; |
Typumwandlung bzw. in Uses Math anhängen;
boboy162 - Mo 12.10.09 18:22
Also ich hab gemerkt dass ich diese Math Bibliothek oder wie es auch heisst nicht habe, zumindest erkennt Delphi diese bei der Deklaration unter USES mit "MATH" nicht.
Hab dann das Problem gelöst in dem ich geschaut hab wie so eine Funktion die so eine Rechnung mit Hochzahlen löst aussieht.
Hier dann der ganze Code, für die Leute die vor einem ähnlichem Problem stehen oder stehen werden.
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: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) BPlus: TButton; BMinus: TButton; BMal: TButton; BTeilen: TButton; BGleich: TButton; B7: TButton; B8: TButton; B6: TButton; B3: TButton; B4: TButton; B5: TButton; B1: TButton; BPunkt: TButton; B2: TButton; B9: TButton; BClear: TButton; Edit1: TEdit; B0: TButton; BPlusMinus: TButton; BHochzahl: TButton; BWurzel: TButton; BCos: TButton;
procedure B1Click(Sender: TObject); procedure B2Click(Sender: TObject); procedure B3Click(Sender: TObject); procedure B4Click(Sender: TObject); procedure B5Click(Sender: TObject); procedure B6Click(Sender: TObject); procedure B7Click(Sender: TObject); procedure B8Click(Sender: TObject); procedure B9Click(Sender: TObject); procedure B0Click(Sender: TObject); procedure BGleichClick(Sender: TObject); procedure BPlusClick(Sender: TObject);
procedure richtigAnzeigen(text: string); procedure Zusammenrechnen(); procedure ProzessAntwortschonangezeigt(); procedure BMinusClick(Sender: TObject); procedure BMalClick(Sender: TObject); procedure BTeilenClick(Sender: TObject); procedure BClearClick(Sender: TObject); procedure BPunktClick(Sender: TObject); procedure BPlusMinusClick(Sender: TObject); procedure BHochzahlClick(Sender: TObject); procedure BWurzelClick(Sender: TObject); procedure BCosClick(Sender: TObject);
private public end;
var Form1: TForm1; Ergebnis: double = 0; Operator: string = ''; Antwortschonangezeigt : integer = 0;
implementation
{$R *.dfm}
function Potenz(Base, Exponent: Extended): Extended; begin if Exponent = 0.0 then Result := 1.0 else if (Base = 0.0) and (Exponent > 0.0) then Result := 0.0 else if Exponent = 2 then result := Sqr(Base) else Result := Exp(Ln(Base) * Exponent ); end;
function degcos(x: Extended): Extended; begin degcos := cos(x * 2 * pi / 360); end;
procedure TForm1.Zusammenrechnen(); Begin if Operator = '' then begin Ergebnis := strtofloat(edit1.Text); end; if Operator = '+' then begin Ergebnis := Ergebnis + strtofloat(edit1.Text); end; if Operator = 'x' then begin Ergebnis := Ergebnis * strtofloat(edit1.Text); end; if Operator = '/' then begin Ergebnis := Ergebnis / strtofloat(edit1.Text); end; if Operator = '-' then begin Ergebnis := Ergebnis - strtofloat(edit1.Text); end; if Operator = 'xx' then begin Ergebnis := Potenz(Ergebnis, (strtofloat (edit1.Text))); end; if Operator = 'Wurzel' then begin Ergebnis := Potenz(Ergebnis, 0.5); end; if Operator = 'Cos' then begin Ergebnis := degCos (strtofloat (edit1.Text)); end;
end;
procedure TForm1.ProzessAntwortschonangezeigt(); begin Antwortschonangezeigt := 1; edit1.Text := floattostr(Ergebnis); end;
procedure TForm1.richtigAnzeigen(text: string); begin
if Antwortschonangezeigt = 1 then begin Antwortschonangezeigt := 0; edit1.text := '' ; end;
if edit1.Text = '0' then begin edit1.Text := ''; end; edit1.Text := edit1.Text + text;
end;
procedure TForm1.BTeilenClick(Sender: TObject); begin Zusammenrechnen();
Operator := '/';
ProzessAntwortschonangezeigt(); end;
procedure TForm1.BMinusClick(Sender: TObject); begin Zusammenrechnen();
Operator := '-';
ProzessAntwortschonangezeigt(); end;
procedure TForm1.BPlusClick(Sender: TObject); begin
Zusammenrechnen();
Operator := '+';
ProzessAntwortschonangezeigt();
end;
procedure TForm1.BHochzahlClick(Sender: TObject); begin Zusammenrechnen();
Operator := 'xx';
ProzessAntwortschonangezeigt(); end;
procedure TForm1.BWurzelClick(Sender: TObject); begin Zusammenrechnen();
Operator := 'Wurzel';
ProzessAntwortschonangezeigt();
end;
procedure TForm1.BCosClick(Sender: TObject); begin Zusammenrechnen();
Operator := 'Cos';
ProzessAntwortschonangezeigt();
end;
procedure TForm1.BGleichClick(Sender: TObject); begin Zusammenrechnen();
Operator := '';
ProzessAntwortschonangezeigt();
end;
procedure TForm1.BMalClick(Sender: TObject); begin Zusammenrechnen();
Operator := 'x';
ProzessAntwortschonangezeigt(); end;
procedure TForm1.B1Click(Sender: TObject); begin richtigAnzeigen ('1');
end;
procedure TForm1.B2Click(Sender: TObject); begin richtigAnzeigen ('2');
end;
procedure TForm1.B3Click(Sender: TObject); begin richtigAnzeigen ('3');
end;
procedure TForm1.B4Click(Sender: TObject); begin richtigAnzeigen ('4');
end;
procedure TForm1.B5Click(Sender: TObject); begin richtigAnzeigen ('5');
end;
procedure TForm1.B6Click(Sender: TObject); begin richtigAnzeigen ('6');
end;
procedure TForm1.B7Click(Sender: TObject); begin richtigAnzeigen ('7');
end;
procedure TForm1.B8Click(Sender: TObject); begin richtigAnzeigen ('8');
end;
procedure TForm1.B9Click(Sender: TObject); begin richtigAnzeigen ('9');
end;
procedure TForm1.B0Click(Sender: TObject); begin richtigAnzeigen ('0');
end;
procedure TForm1.BPunktClick(Sender: TObject); begin richtigAnzeigen ('.');
end; procedure TForm1.BPlusMinusClick(Sender: TObject); begin richtigAnzeigen ('-');
end;
procedure TForm1.BClearClick(Sender: TObject); begin Ergebnis := 0 ; Operator := ''; Antwortschonangezeigt := 0; edit1.Text := ''; end;
end. |
Nur noch eine Frage, wie schaff ich es gewisse Teile in meinem Code zusammen zufassen. Also z.B so dass dann bei den Buttons im Editor ein Plus Zeichen davor steht damit man sich das anzeigen kann oder ausblenden kann.
Weil der ist jetzt ziemlich lang geworden mit der Zeit.
Und noch eine Frage...^^ Wie kann ich diese Math Bibiothek noch dazu installieren. Besitze die Schüler Version von Delphi 6.
Gruß
Danke
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
martin300 - Di 13.10.09 10:18
Sobald du auf der Form auf einen Button klickst wird dem Ereignis eine Methode zugewiesen. Bei dir ist das B0Click bis B9Click und noch die ganzen Operatoren. Der Inhalt ist immer
Delphi-Quelltext
1:
| richtigAnzeigen ('entsprechende Nummer'); |
Da bei einem Taschenrechner die Buttons eine Beschriftung haben könntest du diese Abfangen und den ganzen Button klicks eine einzige Methode zuweisen. Diese Methode liest die Beschriftung ein und sendet sie weiter.
Das könnte so aussehen:
Delphi-Quelltext
1:
| procedure ButtonClick (Sender : TObject); |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TFormXX.ButtonClick(Sender: TObject); var btnCaption : String; begin if Sender is TButton then begin btnCaption := TButton(Sender).Caption; richtigAnzeigen(btnCaption); end; end; |
Diese Methode kann im Objektinspektor bei jedem Button in der Registerkarte Ereignisse unter Eingabe und dann OnClick (dort stehen schon deine ganzen Methoden) ersetzt werden.
Wie es mit der Potenz in deiner Delphi Version aussieht kann ich nicht sagen. Du hast aber schon selbst eine Funktion geschrieben, die das auch kann.
boboy162 - Di 13.10.09 17:08
Gibt es keine möglich keit im Delphi Editor gewisse Teile des Quelltextes auszublenden, zusammen zufassen oder um irgendwie die ÜBersichtbarkeit zu steigern?
Gruß
Hugo343 - Di 13.10.09 17:23
Soweit ich weiß ist die einfachste Möglichkeit dazu auf das + links neben "procedure ..." klicken. Oder du lagerst Funktionen und Prozeduren in einer anderen Unit aus.
jaenicke - Mi 14.10.09 01:24
Nein, leider ist das nicht mehr möglich wie ich auch vor einigen Tagen in die Anleitung hineineditiert habe. Seit einigen Tagen ist Turbo Delphi nämlich nicht mehr verfügbar.
Und wenn die Version von Delphi um die es hier geht noch nicht einmal die Unit Math kennt, dann sind dort sicher auch noch keine Funktionen wie Codefolding oder ähnliches drin, weil es sich noch um Delphi 3 oder so handelt. Leider kommt die Frage dann 3 Wochen zu spät oder so, denn derzeit gibt es eben leider keine neuere Delphiversion mehr kostengünstig.
boboy162 - Sa 17.10.09 16:57
Hallo zusammen
ICh möchte jetzt meinem Taschenrechner das Rechnen mit Logarithmus zeigen, da ich die Math Unit nicht einbinden kann, wollte ich fragen ob jemand eine Funktion kennt, die einen Logarithmus berechnet.
Hab bei google schon nachgefragt...^^
Gruß
jaenicke - So 18.10.09 00:18
boboy162 hat folgendes geschrieben : |
| da ich die Math Unit nicht einbinden kann |
Also selbst bei Delphi 3 ist die eigentlich dabei.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!