Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Taschenrechner bauen, Problem mit Addition (https://www.delphipraxis.net/147904-taschenrechner-bauen-problem-mit-addition.html)

Steve-0 18. Feb 2010 16:59


Taschenrechner bauen, Problem mit Addition
 
Aufgabe ist es, einen Taschenrechner zu schreiben, der u.a. auch Addition beherrscht.
Der Taschenrechner hat ein Edit-Feld, in das Zahlen eingegeben werden können (StrToFloat, aber da liegt auch nciht das Problem), mit denen der Taschenrechner dann über versch. Buttons auf der Benutzeroberfläche Rechnungen durchführt(Eingabefeld ist auch gleich Ausgabefeld). Vorher hatte ich nur Rechnungen, wo etwas mit der eingegebenen Zahl selbst passieren sollte (Wurzel, Quadrat), aber bei der Addition muss ich ja 2 Zahlen angeben, die dann addiert werden. Ich will aber trotzdem nur ein Edit-Feld benutzen.

Wisst ihr ne Lösung, wie man z.B. die eingegebenen Werte bei Klick aufs "+" speichern kann und dann einen neuen Wert eingeben kann und dann bei Klick auf einen "="-Button das Ergebnis erscheint? Cool wäre es auch, wenn sich der Schritt mit dem Klick aufs "+" wiederholen lassen kkönnte, sodass auch Rechnungen, wie x+y+z+a+b+c+d machbar wären.

Danke im Voraus :)

BackOrifice 18. Feb 2010 17:08

Re: Taschenrechner bauen, Problem mit Addition
 
Variable global für die Funktion (private?) deklarieren und beim OnClick des '+' speichern, was im Editfeld steht. Ist die Variable vorher <> 0, führst du die Berechnung durch.

MuTzE.Y85 18. Feb 2010 17:11

Re: Taschenrechner bauen, Problem mit Addition
 
Globale Variable deklarieren:

var
Speicher: Extended; //Oder was auch immer

Und dann vorher dort speichern und wieder holen beim drücken auf "="

xZise 18. Feb 2010 17:17

Re: Taschenrechner bauen, Problem mit Addition
 
Moin,
solange du nur von links nach rechts rechnest, also sagen wir mal so, alle Rechenregeln vernachlässigst (2+3*2 = 10) kannst du das so machen, dass du dir das Ergebnis zwischenspeicherst. Und nebenbei in einem Boolean speicherst ob bereits mindestens eine Zahl eingegeben wurde.
Das heißt, wenn man gibt das so ein:
  1. Zuerst die 2 in das Edit
  2. Das Plus drücken (die 2 hier zwischenspeichern und speichern, dass eine Zahl gespeichert wurde)
  3. Die 3 in das Edit
  4. Das Mal drücken (hier jetzt die Zahl aus den Zwischenspeicher mit den Operator von oben (das plus) mit der neuen Zahl verarbeiten und in den zwischenspeicher schreiben)
  5. Die 2 in das Edit
  6. Das gleich drücken (hier wieder die Zahlen aus den Zwischenspeicher und der zwei mit dem Opeator verknüpfen und jetzt das Ergebnis nur ausgeben und in den Boolean so setzen, dass er weiß, dass keine Zahl eingeben wurde)
Das heißt du müsstest auch den Operator speichern. Das geht entweder über eine Delphi-Referenz durchsuchenEnumeration oder (nicht ganz so schön) über Konstanten und Integer.

MfG
Fabian

PS: Ist ja cool das ein Thread von mir als erstes auftaucht :D

Steve-0 18. Feb 2010 17:26

Re: Taschenrechner bauen, Problem mit Addition
 
Ja, die Prozedur hab ich auch schon durchgedacht, ich weiß nur nicht, wie man zwischenspeichert, kann da einer mal den Code zu reinschreiben? :?:

Danke, schonmal :-)

Mariaki 18. Feb 2010 17:31

Re: Taschenrechner bauen, Problem mit Addition
 
mach das doch mit pos('+',s) und dann die zahl vor und nach dem '+' addieren und ergebnis anstatt Zahl1+Zahl2 in den String einfügen... das gleiche dann mit */-. Setzt das dann in je eine 'While pos(..)<>0 do' Schleife.
Wenn du dann die Schleifen in der richtigen Reihenfolge machst (*/+-) hast du sogar die mathematische-Richtigkeit drin.
Das ganze reicht dann wenn du das in die =-Button-Procedure packst. Das hat den Vorteil dass der Rechner auch funtioniert, wenn der Benuzter deine Tasten nicht nutzt und es so hinein schreibt.
Es wird nur ein Problem wenn du auch Klammern haben möchtest.

Gruß Mariaki

Steve-0 18. Feb 2010 17:32

Re: Taschenrechner bauen, Problem mit Addition
 
Ja, der Taschenrechner soll aber über die Tasten laufen, das war die Vorgabe für die Aufgabe ;)

Mariaki 18. Feb 2010 17:34

Re: Taschenrechner bauen, Problem mit Addition
 
Würde ja auch noch klappen.. nur dass die tasten nur noch die Funktion des Einfügens haben.

Delphi-Narr 18. Feb 2010 18:29

Re: Taschenrechner bauen, Problem mit Addition
 
Ich hatte auch mal eine Aufgabe und habe diese dann ausgeweitet, beherrschte schließlich Punkt vor Strich.
Man hat einen Term eingegeben, dieser wurde dann in Rechenzeichen und Zahlen zerlegt und dann nach Punkt vor Strich ausgerechnet.

Guck mal hier


So läuft das Ganze auch nur über Tasten...
Liebe Grüße!

xZise 18. Feb 2010 19:42

Re: Taschenrechner bauen, Problem mit Addition
 
Hallo,
um etwas zwischenzuspeichern musst du nur definieren das es einen Zwischenspeicher gibt. Dafür muss du entscheiden, wer alles den Zwischenspeicher kennt. Umso weniger umso besser!
Delphi-Quellcode:
type
  TClass = class(...)
    // 2.
  private
    // 1.
  public
    // 2.
  end;

var
  // 3.

implementation
Dabei würde ich sie immer in den privaten Bereich schreiben, und nur wenns nicht anders geht in den public-Bereich. Und in äußersten Notfällen geht auch der 3. Bereich. Aber denn sollte man sogut es geht vermeiden.

Dort schreibst du dann zuerst den Namen des Zwischenspeichers dann ein Doppelpunkt und dann gibst du den Typ an. Integer speichert zum Beispiel Ganzzahlen mit Vorzeichen und string eine Zeichenkette und Extended eine Fließkommazahl. Für weitere Infos zu den Datentypen empfehle ich ein Tutorial (siehe www.delphi-treff.de), die Wikipedia oder die Delphi Hilfe.

Danach kannst du jeder Zeit mit der Zuweisung einen Wert zuweisen (<name> := <neuer wert>). Wenn man den Wert bekommen will, einfach hinschreiben und dann damit arbeiten.
Aber ich denke da solltest du erstmal ein Tutorial lesen.

MfG
Fabian


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 Uhr.
Seite 1 von 2  1 2      

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