Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi Mehrere Zahlen Rechnen (https://www.delphipraxis.net/201947-mehrere-zahlen-rechnen.html)

DelphiDustin 12. Sep 2019 13:40

Mehrere Zahlen Rechnen
 
Hallo Leute ich mal wieder,

Ich habe einen Taschenrechenr programmiert bei dem man die Zahlen über Buttons eingibt isher konnte man immer nur 2 Zhalen eingeben ich möchte jetzt aber das man mit mehr Zahlen rechnen kann. Ich habe die vermutung das man mit arrays arbeiten muss aber ich weiß nicht genau wie ich das anstellen soll.

Delphi-Quellcode:
var
  Form4: TForm4;
         Zahl1, Zahl2:double;
         istKomma, istPlus, istMinus, istMal, istGeteielt, istErgebnis:Boolean;
implementation

{$R *.dfm}


procedure TForm4.Plus;
begin
edit1.Text:=floattostr(Zahl1+Zahl2);
end;

procedure TForm4.Minus;
begin
  edit1.Text:=floattostr(Zahl1-Zahl2);
end;

procedure TForm4.Mal;
begin
edit1.Text:=floattostr(Zahl1*Zahl2);
end;

procedure TForm4.Geteielt;
begin
edit1.Text:=floattostr(Zahl1/Zahl2);
end;

procedure TForm4.GeteieltButtonClick(Sender: TObject);
begin
     zahl1:=strtofloat(edit1.Text);
     istKomma:=false;
     edit1.Text:='';
     label1.Caption:=floattostr(Zahl1)+'/';
istGeteielt:=True ;
istPlus:=false;
istMinus:=false;
istMal:=false;
istErgebnis:=true;
end;

procedure TForm4.MalButtonClick(Sender: TObject);
begin
   zahl1:=strtofloat(edit1.Text);
   istKomma:=false;
   edit1.Text:='';
        label1.Caption:=floattostr(Zahl1)+'*';
istMal:=True ;
istPlus:=false;
istMinus:=false;
istGeteielt:=false;
istErgebnis:=true;
end;

procedure TForm4.MinusButtonClick(Sender: TObject);
begin
    zahl1:=strtofloat(edit1.Text);
    istKomma:=false;
    edit1.Text:='';
         label1.Caption:=floattostr(Zahl1)+'-';
  istMinus:=True;
  istPlus:=false;
  istMal:=false;
  istGeteielt:=false;
  istErgebnis:=true;
end;

procedure TForm4.PlusButtonClick(Sender: TObject);
begin
   zahl1:=strtofloat(edit1.Text);
   istKomma:=false;
   edit1.Text:='';
        label1.Caption:=floattostr(Zahl1)+'+';
istPlus:=True;
istMinus:=false;
istMal:=false;
istGeteielt:=false;
istErgebnis:=true;
end;

procedure TForm4.GleichButtonClick(Sender: TObject);
begin
label1.Caption:='';
istKomma:=false;
zahl2:=strtofloat(edit1.Text);
  if istPlus=true then plus;
  if istMinus=true then Minus;
  if istMal=true then Mal;
  if istGeteielt=true then Geteielt;
end;

procedure TForm4.NullButtonClick(Sender: TObject);
begin
edit1.Text:=edit1.Text+'0'
end;

procedure TForm4.EinsButtonClick(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'1'
end;

procedure TForm4.ZweiButtonClick(Sender: TObject);
begin
 edit1.Text:=edit1.Text+'2'
end;

procedure TForm4.DreiButtonClick(Sender: TObject);
begin
 edit1.Text:=edit1.Text+'3'
end;

procedure TForm4.VierButtonClick(Sender: TObject);
begin
   edit1.Text:=edit1.Text+'4'
end;

procedure TForm4.FünfButtonClick(Sender: TObject);
begin
    edit1.Text:=edit1.Text+'5'
end;

procedure TForm4.SechsButtonClick(Sender: TObject);
begin
    edit1.Text:=edit1.Text+'6'
end;
procedure TForm4.SiebenButtonClick(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'7' ;
end;

procedure TForm4.AchtButtonClick(Sender: TObject);
begin
    edit1.Text:=edit1.Text+'8'
end;

procedure TForm4.BackSpaceButtonClick(Sender: TObject);
var
    Länge:string;
    NeueLänge:Integer;
begin
if istErgebnis=false then
    Länge:= edit1.Text;
    NeueLänge:=Length(edit1.Text);
    setlength(länge,NeueLänge-1);
    NeueLänge:=NeueLänge-1;
    edit1.text:=Länge
end;


procedure TForm4.NeunButtonClick(Sender: TObject);
begin
    edit1.Text:=edit1.Text+'9'
end;

procedure TForm4.KommaButtonClick(Sender: TObject);
begin
if istKomma=false then
edit1.Text:=edit1.Text+',';
if istKomma=false then
      istKomma:=true
end;

procedure TForm4.LöschenButtonClick(Sender: TObject);
begin
     edit1.Text:='';
     label1.Caption:=''
end;

end.
lg Dustin

Klaus01 12. Sep 2019 13:45

AW: Mehrere Zahlen Rechnen
 
.. ist beim Taschenrechner die Funktionsweise nicht so:

Zahl1 eingeben
Rechenoperation drücken
Zahl2 eingeben
= drücken.
Rechenoperation drücken
Zahl 3 eingeben
= drücken

Mit Klammern wird es etwas komplizierter.

Grüße
Klaus

DelphiDustin 12. Sep 2019 13:51

AW: Mehrere Zahlen Rechnen
 
Zitat:

Zitat von Klaus01 (Beitrag 1445867)
.. ist beim Taschenrechner die Funktionsweise nicht so:

Zahl1 eingeben
Rechenoperation drücken
Zahl2 eingeben
= drücken.
Rechenoperation drücken
Zahl 3 eingeben
= drücken

Mit Klammern wird es etwas komplizierter.

Wie würde man das denn Programieren?

KodeZwerg 12. Sep 2019 14:26

AW: Mehrere Zahlen Rechnen
 
Dir fehlt an sehr vielen Stellen ein Terminator Zeichen.
Beispiel aus
Delphi-Quellcode:
procedure TForm4.EinsButtonClick(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'1'
end;
würde ich ein
Delphi-Quellcode:
procedure TForm4.EinsButtonClick(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'1';
end;
machen. Vielleicht liegt darin Dein Problem?

DelphiDustin 12. Sep 2019 14:33

AW: Mehrere Zahlen Rechnen
 
Zitat:

Zitat von KodeZwerg (Beitrag 1445870)
Dir fehlt an sehr vielen Stellen ein Terminator Zeichen.
Beispiel aus

Stimmt füg ich gleich hinzu

Zitat:

Zitat von KodeZwerg (Beitrag 1445870)
Vielleicht liegt darin Dein Problem?

Der Rechner funktioniert ja es geht mir nur darum mit mehreren zahlen als 2 zu rechnen

Jonas Shinaniganz 12. Sep 2019 14:44

AW: Mehrere Zahlen Rechnen
 
Naja, zur Zeit hast du ja nur 2 Textfelder für 2 Zahlen, wie möchtest du denn die weiteren Zahlen zum rechnen eingeben?
Gruß Jonas

DelphiDustin 12. Sep 2019 14:49

AW: Mehrere Zahlen Rechnen
 
Zitat:

Zitat von Jonas Shinaniganz (Beitrag 1445876)
Naja, zur Zeit hast du ja nur 2 Textfelder für 2 Zahlen, wie möchtest du denn die weiteren Zahlen zum rechnen eingeben?
Gruß Jonas

Ja ich weiß(hab übrigens nur ein textfeld für beide zahlen) ich möchte aber jetzt auch keine 20 weiteren doubles eingeben um damit zu rechnen es gibt ja bestimmt einen leicteren Weg über Arrays oder so

Jonas Shinaniganz 12. Sep 2019 14:57

AW: Mehrere Zahlen Rechnen
 
Ok, verstehe :P
Du könntest den Rechner so umbauen, dass dein Gleich-Button das Ergebnis zusätzlich noch in Zahl 1 speichert,
dann könnte man die nächste Zahl mit deinen Knöpfen eingeben und mit dem Ergebnis aus dem vorherigen Schritt weiter rechnen...

ich vermute das sind nicht "allzuviele" Anpassungen.

edit:

Manche Taschenrechner arbeiten auch auf die Art, dass wenn man als Beispiel 1+1 rechnet und dann nochmal + drückt, einfach erstmal 1+1 gerechnet wird und dann 2+ in der Eingabe steht. Dass wäre dann vergleichbar mit dem von mir beschriebenen Ansatz.

DelphiDustin 12. Sep 2019 15:08

AW: Mehrere Zahlen Rechnen
 
Zitat:

Zitat von Jonas Shinaniganz (Beitrag 1445880)
Ok, verstehe :P
Du könntest den Rechner so umbauen, dass dein Gleich-Button das Ergebnis zusätzlich noch in Zahl 1 speichert,
dann könnte man die nächste Zahl mit deinen Knöpfen eingeben und mit dem Ergebnis aus dem vorherigen Schritt weiter rechnen...

Das ist tasächlich schon möglich :-D
Aber es wird von mir verlangt das der Rechner zum beispiel

Zahl1+Zahl2*Zahl3

direkt rechnen kann ohne einmal "=" Zu drücken.
Und natürlich mit Punkt vor Strich.

KodeZwerg 12. Sep 2019 15:19

AW: Mehrere Zahlen Rechnen
 
In meinem Calculator hab ich nur zwei Edit's, eins für Eingabe eins für Ausgabe.
Also bei einem weiteren "+" "-" "*" "/" etc wird mit der Ausgabe gearbeitet und dann eine Eingabe im ersten Edit erwartet (oder umgekehrt, ist schon ein paar Jahrzehnte her...).
Egal ob man zwischenzeitlich auf "=" klickt oder was auch immer macht, Input und Output halt miteinander in Harmonie ab-/arbeiten lassen.

Mfg.

TurboMagic 12. Sep 2019 18:43

AW: Mehrere Zahlen Rechnen
 
Zitat:

Zitat von KodeZwerg (Beitrag 1445870)
Dir fehlt an sehr vielen Stellen ein Terminator Zeichen.
Beispiel aus
Delphi-Quellcode:
procedure TForm4.EinsButtonClick(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'1'
end;
würde ich ein
Delphi-Quellcode:
procedure TForm4.EinsButtonClick(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'1';
end;
machen. Vielleicht liegt darin Dein Problem?

Nein, daran liegt es nicht, auch wenn es säuberer mit ist.
Es gibt nämlich eine kleine wenig beachtete Spezialregel für die Syntax:
vor dem letzten End des Blocks darf das ; weggelassen werden ;-)

Der Compiler meckert da nicht und das Programm tut, was man programmiert hat.

Delphi-Laie 12. Sep 2019 20:31

AW: Mehrere Zahlen Rechnen
 
Zitat:

Zitat von KodeZwerg (Beitrag 1445870)
Dir fehlt an sehr vielen Stellen ein Terminator Zeichen.
Beispiel aus
Delphi-Quellcode:
procedure TForm4.EinsButtonClick(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'1'
end;
würde ich ein
Delphi-Quellcode:
procedure TForm4.EinsButtonClick(Sender: TObject);
begin
  edit1.Text:=edit1.Text+'1';
end;
machen. Vielleicht liegt darin Dein Problem?

Ist das Semikolon gemeint?

Wenn irgendwo eines fehlen täte, würde der Compiler es doch gleich monieren!

Tatsächlich ist das Semikolon in Pascal kein Terminatorzeichen. Man könnte es genausogut auch vor jede Anweisung schreiben, das wäre auch möglich und würde genausogut funktionieren. Doch es ist auch kein Einleitungszeichen.

In Wirklichkeit ist es ein (Ab)Trenn(ungs)zeichen und dient dazu, Anweisungen voneinander zu trennen (und genau dafür benutze ich es auch).

Den Unfug, daß hinter jeder Anweisung ein Semikolon zu setzen sei, ja gesetzt werden muß, las ich sogar schon in einem Delphibuch.

hoika 13. Sep 2019 06:38

AW: Mehrere Zahlen Rechnen
 
Hallo,
mehrere Zahlen + Klammern -> Formelparser.

Das ist dann kein Array, sondern ein Baum.
Die Knoten sind das jeweilige Rechenzeichen bzw. die Klammer.

Klingt etwas komplizierter -> ist es auch.

KodeZwerg 13. Sep 2019 07:25

AW: Mehrere Zahlen Rechnen
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1445924)
In Wirklichkeit ist es ein (Ab)Trenn(ungs)zeichen und dient dazu, Anweisungen voneinander zu trennen (und genau dafür benutze ich es auch).

Mag noch etwas früh sein, da das Wort "trennen" bei Dir vorkommt, nenn ich es halt terminieren, sprich "Anweisung ist hier am Ende und die nächste kann kommen" :-)
Zitat:

Zitat von TurboMagic (Beitrag 1445914)
Es gibt nämlich eine kleine wenig beachtete Spezialregel für die Syntax:
vor dem letzten End des Blocks darf das ; weggelassen werden ;-)

Ohhhkay, das war mir neu, Danke für den Hinweis.
Zitat:

Zitat von hoika (Beitrag 1445964)
mehrere Zahlen + Klammern -> Formelparser.

Das tat ich am Ende dann auch, zum erlernen war mir das mit zwei Edit's ausreichend.
Sehr guter Tipp!

Einen guten Morgen und einen schönen Tag euch allen!

DelphiDustin 13. Sep 2019 07:57

AW: Mehrere Zahlen Rechnen
 
Zitat:

Zitat von hoika (Beitrag 1445964)
Hallo,
mehrere Zahlen + Klammern -> Formelparser.

Jo danke hatte das auch irgendwo gelesen hättest du vielleicht eine seite wo man sich gut zu dem Thema einlesen kann? Ich finde im Internet irgendwie nichts gutes.

Jumpy 13. Sep 2019 09:10

AW: Mehrere Zahlen Rechnen
 
Ich würde ehrlich gesagt den Formelparser und somit das geklammere erstmal weg lassen und einen ganz einfachen Taschenrechner nachprogrammieren.

Du bräuchtest einen Buffer für die aktuell eingegebene Zahl und dann einen Speicher/Variable für Zahlen 1 bis 3, sowie zwei Speicher für die Rechenoperationen.

Wird eine Zahl eingegeben wird sie in den Buffer geschrieben, wird ein Operator eingegeben kommt die aktuelle Zahl vom Buffer in den Speicher für Zahl1, der Operator in den Speicher dafür und es wird der Buffer geleert und auf eine neue Zahleingabe gewartet, usw. usw.

Das ist eingetlich eine schöne Übung, um das logische Denken zu üben, wenn man das so umsetzt. Ein bißchen wie eine Statemachine für Anfänger.

Man kann das dann auch so umsetzen, das man nur eine Event-Prozedur hat für "Zahl wird eingegeben" und eine für "Operator wird eingegeben". Hierzu könnte man z.B. mit der Eigenschaft "Tags" der Button arbeiten.

Will man bei der Eingabe Komma-Zahlen zulassen, muss man sich nochmal ein paar Gedanken Extra machen.

hoika 13. Sep 2019 11:54

AW: Mehrere Zahlen Rechnen
 
Hallo,
eine ausführliche Anleitung zu Formelparsern:
https://maciejewski.com/en/implement...ser-in-delphi/

Vorsicht:
Ist nicht leicht.


Deshalb auch von mir der Vorschlag, erst mal was einfacheres zu machen.

KodeZwerg 16. Sep 2019 07:18

AW: Mehrere Zahlen Rechnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ohne parsen aber mit Berechnungen ohne limit hab ich mal im Anhang ein binary plus source hochgeladen.
Vielleicht hilft es Dir bei Deiner "ich kann nur einmal Rechnen dann ist aus" Problematik.
Desweiteren erfolgen alle Button abfragen über Ihre TAG property so das man nur eine Methode für alle buttons nutzt (okay, da sind zwei um Zahlen von Operationen zu trennen *g*)

Good luck & have a nice week!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 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