Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Taschenrechner (https://www.delphipraxis.net/134965-taschenrechner.html)

safak67 2. Jun 2009 11:14


Taschenrechner
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich soll ein Taschenrechner programmieren habe auch damit angefangen. Ich habe aber einige Probleme.

Ich habe nur Ein Textfeld und von da aus muss ich alles ausrechnen aber hab keine Ahnung wie das geht, kann mir jemand dabei helfen.. Mein bisheiger Quelltext

Delphi-Quellcode:
unit Calculator_Main;

interface

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

type
  TFormCalculator_Main = class(TForm)
    BitBtn1: TBitBtn;
    EditCalc: TEdit;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    BitBtn5: TBitBtn;
    BitBtn6: TBitBtn;
    BitBtn7: TBitBtn;
    BitBtn8: TBitBtn;
    BitBtn9: TBitBtn;
    BitBtn0: TBitBtn;
    BitBtnDecimalSep: TBitBtn;
    BitBtnResult: TBitBtn;
    BitBtnPlus: TBitBtn;
    BitBtnMinus: TBitBtn;
    BitBtnDiv: TBitBtn;
    BitBtnMult: TBitBtn;
    BitBtnParantheseLeft: TBitBtn;
    BitBtnParantheseRight: TBitBtn;
    procedure BitBtnClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FormCalculator_Main: TFormCalculator_Main;

implementation

{$R *.dfm}

procedure TFormCalculator_Main.BitBtnClick(Sender: TObject);
begin
  EditCalc.Text := EditCalc.Text + TBitBtn(Sender).Caption;
end;

end.

oldmax 2. Jun 2009 11:51

Re: Taschenrechner
 
Hi
Wie wär es mal mit ein wenig Eigeniniative ? Taschenrechner.... Suchen und... anfangen, sich damit zu beschäftigen. Hier ist sicherlich nicht das Forum, das Hausaufgaben macht !
Gruß oldmax

safak67 2. Jun 2009 12:26

Re: Taschenrechner
 
Eigeninitiative habe ich schon.. Ich habe auch ein Taschenrechner programmiert, aber ich hatte da zwei Textfelder und jetzt habe ich nur ein Textfeld und da ist das Problem. Ich weiß nicht wo ich die berechnungen schreiben soll.

DeddyH 2. Jun 2009 12:31

Re: Taschenrechner
 
Du brauchst einfach nur Zwischenvariablen, in denen Du die Werte abspeicherst.

safak67 2. Jun 2009 13:26

Re: Taschenrechner
 
Wie mache ich denn die Zwischenspeicherung?

DeddyH 2. Jun 2009 13:53

Re: Taschenrechner
 
Delphi-Quellcode:
type
  TFormCalculator_Main = class(TForm)
    ...
  private
    FZahl: double; //Puffervariable
  ...
  end;

...

procedure TFormCalculator_Main.BitBtnClick(Sender: TObject);
begin
  //FZahl berechnen
  FZahl := FZahl + StrToFloat(TBitBtn(Sender).Caption);
  //und ausgeben
  EditCalc.Text := FloatToStr(FZahl);
end;
So in etwa, wobei ich hier keine Fehlerbehandlung implementiert habe, aber das sollte ja auch nur ein Beispiel zur Veranschaulichung sein.

safak67 2. Jun 2009 14:05

Re: Taschenrechner
 
ok, wird dann die ganze berechnung in diesem procedure gemacht..?
Delphi-Quellcode:
procedure TFormCalculator_Main.BitBtnClick(Sender: TObject);

mkinzler 2. Jun 2009 14:07

Re: Taschenrechner
 
Wie/wo machst du es bisher?

egon.kaschuba 2. Jun 2009 14:37

Re: Taschenrechner
 
:firejump:

Hallo Safak67,

schau Dir mal den Code an.
Das könnte sehr wohl funktionieren.

Gruß
Egon




Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Label1: TLabel;
    Button17: TButton;
    Button18: TButton;
    procedure Button18Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure ZeiButtonClick(Sender: TObject);
    procedure OpButtonClick(Sender: TObject);
    procedure IstButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button19Click(Sender: TObject);
    procedure Hilfe2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

var strBuff1, strBuff2: string;  // Operanden- u. Ergebnisspeicher
    op: Char;                    // Operation (+,-,*,/)
    mode: Byte = 1;              // 1 = ersten Operand eingeben
                                  // 2 = zweiten Operand eingeben

procedure TForm1.Button17Click(Sender: TObject); // Anzeige löschen
begin
 if mode = 1 then StrBuff1 := ''
             else StrBuff2 := '';
 Label1.Caption := ''
end;

procedure TForm1.ZeiButtonClick(Sender: TObject);      // Zahleneingabe
var zei: Char;     // eingegebenes Zeichen
begin
 if Sender = Button10 then zei := '0';
 if Sender = Button1 then zei := '1';
 if Sender = Button2 then zei := '2';
 if Sender = Button3 then zei := '3';
 if Sender = Button4 then zei := '4';
 if Sender = Button5 then zei := '5';
 if Sender = Button6 then zei := '6';
 if Sender = Button7 then zei := '7';
 if Sender = Button8 then zei := '8';
 if Sender = Button9 then zei := '9';
 if Sender = Button11 then zei := '.';
 if mode = 1 then
 begin
  strBuff1 := strBuff1 + zei;
  Label1.Caption := strBuff1
 end else
 begin
  strBuff2 := strBuff2 + zei;
  Label1.Caption := strBuff2
 end
end;

procedure TForm1.OpButtonClick(Sender: TObject);  // Operation auswählen
begin
 if mode = 1 then
 begin
  if Sender = Button14 then op:= '+';
  if Sender = Button15 then op:= '-';
  if Sender = Button12 then op:= '*';
  if Sender = Button13 then op:= '/';
  StrBuff2:='';
  mode := 2
 end
end;

procedure TForm1.IstButtonClick(Sender: TObject); // Ergebnis berechnen
var res, op1, op2: Double;
    code: Integer;
    s: string;
begin
 if mode = 2 then
 begin
  Val(strBuff1, op1, code);    // StringBuffer1 in Zahl verwandeln
  Val(strBuff2, op2, code);    // StringBuffer2 in Zahl verwandeln
  case op of                   // Operation durchführen
   '+': res:= op1 + op2;
   '-': res := op1 - op2;
   '*': res := op1 * op2;
   '/': res := op1 / op2
  end;
  s:= Format('%g',[res]);     // Ergebnis formatieren
  Label1.Caption := s;        // ... und anzeigen
  mode := 1;
  strBuff1 := ''
 end
end;

procedure TForm1.Button18Click(Sender: TObject); // Rechner ausschalten
begin
 Close
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.HelpFile := 'Taschenrechner.hlp'
end;

procedure TForm1.Button19Click(Sender: TObject);
begin
 Application.HelpJump('Inhalt')
end;

procedure TForm1.Hilfe2Click(Sender: TObject);
begin
 Application.HelpJump('Inhalt')
end;

end.

safak67 2. Jun 2009 20:59

Re: Taschenrechner
 
Hi egon,

danke für die Hilfe.. hast du auch das zum runterladen, damit ich mir auch die schaltflächen anschauen kann wie sie aufgebaut sind.. von mir aus auch nur ein foto von der main

mkinzler 2. Jun 2009 21:01

Re: Taschenrechner
 
Zitat:

Zitat von safak67
Hi egon,

danke für die Hilfe.. hast du auch das zum runterladen, damit ich mir auch die schaltflächen anschauen kann wie sie aufgebaut sind.. von mir aus auch nur ein foto von der main

Sollte für das Verständnis völlig irrelevant sein

safak67 2. Jun 2009 21:11

Re: Taschenrechner
 
ich hab es eigentlich schon verstanden. Die frage die ich mich stelle ist nur, z.B rocedure TForm1.ZeiButtonClick(Sender: TObject); muss man das selber erstellen oder wird die automatisch erstellt wenn ich aud die zahelen klicke, das gleiche gilt auch für procedure TForm1.OpButtonClick(Sender: TObject);

muss ich die während der programmierung selber erzeugen?

mkinzler 2. Jun 2009 21:12

Re: Taschenrechner
 
Durch Anklicken des Buttons oder dem Event im OI

safak67 2. Jun 2009 21:18

Re: Taschenrechner
 
ich habe ja aber 9 zahelen oder 4 operatoren.. also demenstsrechend auch soviele buttons, wie mache ich das wenn ich auf 1 oder 4 das er dann auf die gleiche procedure kommt..

mkinzler 2. Jun 2009 21:23

Re: Taschenrechner
 
Diese im Event im OI des entsprechenden Objektes auswählen

safak67 2. Jun 2009 21:28

Re: Taschenrechner
 
aber wenn ich auf button 14 klicke dann kommt er automatisch auf die procedure von button 14 oder wenn ich auf button klicke dann kommt er auf button 13.. aber ich will ja das die 4 operatoren das gleiche procedure haben.. procedure TForm1.OpButtonClick(Sender: TObject);

toms 2. Jun 2009 21:33

Re: Taschenrechner
 
Zitat:

Zitat von safak67
aber wenn ich auf button 14 klicke dann kommt er automatisch auf die procedure von button 14 oder wenn ich auf button klicke dann kommt er auf button 13.. aber ich will ja das die 4 operatoren das gleiche procedure haben.. procedure TForm1.OpButtonClick(Sender: TObject);

Klicke auf den Drop-Down Pfeil im OI. Dort kannst du das Ereignis auswählen.

safak67 2. Jun 2009 21:41

Re: Taschenrechner
 
aber von wo kommt z.B das procedure TForm1.ZeiButtonClick(Sender: TObject);
muss ich das selber erzeugen oder wurde es selbst erzeugt..? wenn ich ja das programm anfange zu schreiben dann habe ich ja noch keine
procedure TForm1.ZeiButtonClick(Sender: TObject);

ich galaub ich kann das nicht so gut erklären..

Das mit OI habe ich schon verstanden..

mkinzler 2. Jun 2009 21:42

Re: Taschenrechner
 
Du kannst diese z.B. mit einem Klick auf den ersten Button erzeugen lassen oder legst diese im Code an

safak67 2. Jun 2009 21:46

Re: Taschenrechner
 
also demetnsprechend umbennen oder wie?

mkinzler 2. Jun 2009 21:49

Re: Taschenrechner
 
Der Namen der Eventmetode ist ja grundsätzlich egal

oldmax 3. Jun 2009 05:54

Re: Taschenrechner
 
Hi
Nun, meine erste Antwort war eigentlich ernst gemeint. Benutze die Suche. Da findest du sicherlich auch Taschenrechner mit einem Eingabetextfeld. Es verwundert mich ein Wenig, wenn du noch nicht einmal die Verwendung von Variablen kennst. Wo lernst du oder wer bringt dir diese Sprache bei. Oder soll ich fragen, wer versucht es? Delphi ist ein sooo einfaches Programm.... einfach ein paar Elemente aus der Toolbox und schon zeigt sich ein schönes funktionierendes Programm. Es gibt Buttons, die man anklicken und Textfelder, in die man hineinschreiben kann. Doch Programmieren ist mehr. Und da weiß ich im Moment nicht, was ich davon halten soll. "Was ist ein Zwischenspeicher ?" Das sind Grundlagen. Mir kommt's vor, als wenn du ohne Kenntisse der 4 Grundrechenarten eine Parabel berechnen willst. Oder irgendwas anderes kompliziertes... Als, die Grundlagen sollte dir dein Lehrer schon einmal beibringen, damit du verstehst, was wir dir an Hilfe geben können. Hier mal eine mögliche Hilfe...
Du deklarierst eine Double-Variable.
Mit dem Button C setzt du diese auf 0. (Clear)
Du setzt weitere Buttons auf deine Form (0-9) sowie Komma oder Punkt und die Rechenarten +,-,* und /.
Nun ordnest du allen ihre Ereignisprozeduren zu. Bei den Ziffern könnte das so aussehen:
Delphi-Quellcode:
TMyForm.Bt_ZweiClick(Sender:TObject);
Begin
  If Neueingabe then ED_Eingabe.Text:=''; // bei einer neuen Zahl das Textfeld leeren
  Neueingabe:=False; // und die Markierung zurücknehmen
  Ed_Eingabe.Text:=ED_Eingabe.Text+'2'; // die Ziffer anhängen
end;
bei den mathematischen Tasten sieht es ähnlich aus, nur das du die Berechnung durchführen mußt. etwa so:
Delphi-Quellcode:
TMyForm.Bt_PlusClick(Sender:TObject);
Begin
  Zwischenspeicher:=Zwischenspeicher+StrToFloat(Ed_Eingabe.Text);
  Ed_Eingabe.Text:=FloatToStr(Zwischenspeicher);
  Neueingabe:=True; // eine neue Eingabe markieren
End;
Hier ist noch viel dran zu arbeiten, z.B. die Abfrage, ob im Textfeld eine gültige Zahl für die Wandlung steht, denn Text ist mathematisch nich berechenbar. Daher mußt du in das entsprechende Format wandeln und zur Ausgabe wieder in Text zurück. Vielleicht hilft es dir. Zur Namensgebung:
Natürlich kannst du die vorgeschlagenen und automatisch erzeugten Namen benutzen, aber es wird dann leicht unübersichtlich. Daher benutze ich bei Editfeldern das Kürzel "ED_" und dann einen aussagekräftigen Namen. Ebenso be BUttons.. "BT_". Somit finde ich mich auch in umfangreichen Programmen zurecht.

Gruß oldmax

egon.kaschuba 7. Jun 2009 16:23

Re: Taschenrechner
 
:drunken:

Hallo Safak67,

tut mir leid,konnte nicht sofort antworten.

Also zum Thema Taschenrechner.

Du brauchst 18 Buttons,und ein Label.


7 8 9 CE
4 5 6 X /
1 2 3 + -
0 . =

Ende


Kann leider kein Bild schicken,betrachte die Zahlen und Symbole als Button.

Gruß

Egon


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz