![]() |
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:
lg Dustin
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. |
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 |
AW: Mehrere Zahlen Rechnen
Zitat:
|
AW: Mehrere Zahlen Rechnen
Dir fehlt an sehr vielen Stellen ein Terminator Zeichen.
Beispiel aus
Delphi-Quellcode:
würde ich ein
procedure TForm4.EinsButtonClick(Sender: TObject);
begin edit1.Text:=edit1.Text+'1' end;
Delphi-Quellcode:
machen. Vielleicht liegt darin Dein Problem?
procedure TForm4.EinsButtonClick(Sender: TObject);
begin edit1.Text:=edit1.Text+'1'; end; |
AW: Mehrere Zahlen Rechnen
Zitat:
Zitat:
|
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 |
AW: Mehrere Zahlen Rechnen
Zitat:
|
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. |
AW: Mehrere Zahlen Rechnen
Zitat:
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. |
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. |
AW: Mehrere Zahlen Rechnen
Zitat:
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. |
AW: Mehrere Zahlen Rechnen
Zitat:
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. |
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. |
AW: Mehrere Zahlen Rechnen
Zitat:
Zitat:
Zitat:
Sehr guter Tipp! Einen guten Morgen und einen schönen Tag euch allen! |
AW: Mehrere Zahlen Rechnen
Zitat:
|
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. |
AW: Mehrere Zahlen Rechnen
Hallo,
eine ausführliche Anleitung zu Formelparsern: ![]() Vorsicht: Ist nicht leicht. Deshalb auch von mir der Vorschlag, erst mal was einfacheres zu machen. |
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 22:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz