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 Delphi Taschenrechner (https://www.delphipraxis.net/101049-delphi-taschenrechner.html)

Dr34m 7. Okt 2007 18:26


Delphi Taschenrechner
 
Hallo Zusammen,
Ich nutze Delphi 3, bin noch recht neu darin und bin grade dabei einen Taschenrechner zu programmieren. Einen mit zwei Editfeldern (Zahl1 in Edit1 und Zahl2 in Edit2 eingeben) habe ich schon geschafft. Ich würde aber gerne einen erstellen können bei dem ich ein Editfeld benutze und dort z.B. eingebe: 81/9
Nur leider habe ich es seit einer Woche nicht geschafft den richtigen Befehl dafür zu finden dass er mir nicht immer sagt "9+3 ist kein gültiger Wert"
Ich brauche also die Unit Befehle, am besten mit Beispiel.

Vielen Dank schonmal im Voraus!

fwsp 7. Okt 2007 18:28

Re: Delphi Taschenrechner
 
dafür gibt es keinen befehl. du musst die eingabe analysieren (parsen) und dann weiter verarbeiten.

DeddyH 7. Okt 2007 18:29

Re: Delphi Taschenrechner
 
Da hast Du Dir aber was vorgenommen, so ein Parser ist nicht einfach zu schreiben.

mkinzler 7. Okt 2007 18:31

Re: Delphi Taschenrechner
 
Es gibt aber auch schon fertige Formelparser

DeddyH 7. Okt 2007 18:33

Re: Delphi Taschenrechner
 
Das stimmt, habe letztens noch irgendwo hier (Code-Library?) einen gesehen, der auch mit Klammerung zurechtkam.

s-off 7. Okt 2007 18:35

Re: Delphi Taschenrechner
 
Dax hat einen geschrieben. Einfach mal hier nach suchen.

Edit: hier und hier

DeddyH 7. Okt 2007 18:38

Re: Delphi Taschenrechner
 
Achja, HAM

Dax 7. Okt 2007 18:39

Re: Delphi Taschenrechner
 
Zitat:

Zitat von DeddyH
Achja, HAM

Was ist damit?

DeddyH 7. Okt 2007 18:42

Re: Delphi Taschenrechner
 
Siehe ab #4 ;)

Dax 7. Okt 2007 18:43

Re: Delphi Taschenrechner
 
Tse, und ich dacht schon, du willst damit was besonderes sagen ;)

Progman 7. Okt 2007 18:57

Re: Delphi Taschenrechner
 
Naja, für einen Taschenrechner als Anfängerproject wäre ein Formelparser sicher zu happig ;)
Aber (@Dr34m) man sollte sich mal den Ablauf durchdenken:
Zahl eingeben (kann auch mehrstellig sein)
bei Eingabe eines Operationszeichens Zahl sich irgendwo merken und Edit leer machen,
Operator ebenfalls merken,
neue Zahl eingeben
bei drücken von "=" neue Zahl und gemerkte Zahl mit durch den Operator vergegebener Operation verrechnen,
Edit leer machen, Ergebnis reinschreiben.
UPN lässt grüßen ;)

inherited 7. Okt 2007 18:58

Re: Delphi Taschenrechner
 
So schwer ist es nicht, nur für Anfänger ist es ziemlich schwierig, vor allem die Vorstellung dahinter wie man es umsetzen kann und vor allem warum ist nicht einfach.

Wenn du es wirklich machen möchtest, solltest du dir eine komplizierte Rechnung aufschreiben und diese Zerlegen, also zB
34+2*9*(39/3+(1+5))^2
Allerdings sollten wir erstmal ohne Klammern anfangen, zB mit 1+5*8+1
Jetzt durchsuchst du wiederholt den string von vorne nach hinten einem * oder / bis keins mehr vorhanden ist, weil es ja punkt vor strich ist. hast du eins gefunden, hier an position4, sucht du ab position 4 rückwärts bis zum Anfang des Strings nach dem nächsten rechenzeichen, klammer oder string-anfang und nimmst den teil als linke seite der rechnung, hier wäre das das + zwischen 1 und 5, die linke seite ist also 5. Das gleiche machst du ab der 4 aufwärts bis Rechenzeichen, Klammer oder Stringende, hier wäre das das + zwischen 8 und 1, also ist die rechte seite die 8. Jetzt hast du die rechenoperation (*) und beide seiten und kannst es ausrechnen, 5*8 ist 4, und den gesamten teil "5*8" mit dem Ergebnis ersetzen.
Bleibt noch 1+40+1
Jetzt gibt es weder / noch * und wir gehen weiter, suchen nach + und - von vorne nach hinten
wir finden das vordere +, gehen nach links bis zum string-anfang, vorher gibt es kein rechenzeichen: linker teil ist also 1. Rechts weiter, wir finden das +, rechter Teil ist 40. Ausrechnen: kommt 41 raus
Bleibt noch 41+1
es ist noch + und - vorhanden, machen das gleiche Spielchen nochmal usw usf.

Mit Klammern ist das ganze ein wenig komplexer,
das heisst: Zuerst musst du ja die Klammern ausrechen. Eine möglichkeit ist die letzte ( zu finden, hier die vor 1, und den gesamten klammerinhalt zu nehmen und deine Funktion die das ding berechnet damit rekursiv aufzurufen, dann den ganzen teil inklusive der Klammern mit dem ergebnis erstzen.

Der von mir beschriebene Lösungsansatz ist auf Verständlichkeit optimiert, das ganze kann man sicher noch Optimieren und ein paar Bugs sind auch drin.
Viel glück :)

Dr34m 7. Okt 2007 19:31

Re: Delphi Taschenrechner
 
Und wie durchsuche ich?!
mit if... then?

bitte mal ein beispiel, falls es if... then ist wie das dann in der unit aussieht.

inherited 8. Okt 2007 15:17

Re: Delphi Taschenrechner
 
Benutze mal die Forensuche, Nach Zeichen suchen kannst du mit Delphi-Referenz durchsuchenPos und PosEx, Teile eines Stringskopieren mit Delphi-Referenz durchsuchenCopy

quendolineDD 8. Okt 2007 15:27

Re: Delphi Taschenrechner
 
Ich weiß nicht, ob in Delphi 3 die Unit StrUtils vorhanden ist, doch dort gibt es nützliche Funktionen wie zum Beispiel LeftStr und RightStr welche du dir mal anschauen könntest :)

Kannst natürlich auch auf ganz normalen Wegen wie im Beitrag darüber geschrieben über Pos und Copy arbeiten.

SubData 8. Okt 2007 15:29

Re: Delphi Taschenrechner
 
Zitat:

Zitat von Dr34m
Und wie durchsuche ich?!
mit if... then?

bitte mal ein beispiel, falls es if... then ist wie das dann in der unit aussieht.

Ohne das jetzt böse zu meinen, solltest du bei solchen Fragen lieber nochmal ganz genau darüber nachdenken, ob du jetzt schon dazu fähig bist einen eigenen Parser zu entwickeln...

Dr34m 10. Okt 2007 20:42

Re: Delphi Taschenrechner
 
Argh! What the hell ist "Substr: String" und was "S: String"

wie muss ich das denn da eingeben wenn ich ne rechnung von 18+3 im editfeld hab?
ich versteh nur noch bahnhof!

Progman 10. Okt 2007 20:47

Re: Delphi Taschenrechner
 
OMG.... Dr34m, du solltest dich erst mal mit den Grundlagen der Delphi-Programmierung befassen ;)

quendolineDD 10. Okt 2007 21:26

Re: Delphi Taschenrechner
 
Bei '18+3' wäre das dann ungefähr so:
Delphi-Quellcode:
s:= '18+3';
a:= copy(s, 0, pos('+', s)-1);
delete(s, 1, pos('+', s));
b:= copy(s, 0, length(s));
Zu deiner Frage. Substr bezeichnet den gesuchten String, und s ist der String, in dem nach Substr gesucht wird.

mdiehlz 11. Okt 2007 08:45

Re: Delphi Taschenrechner
 
Zitat:

Zitat von Dr34m
Argh! What the hell ist "Substr: String" und was "S: String"

wie muss ich das denn da eingeben wenn ich ne rechnung von 18+3 im editfeld hab?
ich versteh nur noch bahnhof!

Die richtigen Pascalbefehle? :gruebel:

Dir fehlt noch Basiswissen. Ohne das geht es nicht!

Einen Taschenrechner zu programmieren ist relativ einfach, aber für den Anfänger nicht trivial. Es gibt da einiges zu beachten.
Meine Praktikanten müssen da auch durch. :shock:

Kleiner Tip: Bevor Du dich an den Taschnenrechner machst, solltest Du er paar kleinere Übungen durchziehen.

Übung 1
3 Editfelder auf das Form ziehen und 4 Buttons für +,-,*,/
Geplante funktionsweise: In den ersten 2 Editfelder jeweils Zahlen eingeben und nach drücken eines Buttons das Ergebnis im dritten Editfeld anzeigen lassen.

Wenn du das selbst gemacht und verstanden hast, weisst Du was ein String und was reele Zahlen sind.

Übung 2
Prüfen ob der Benutzer wirklich gültige Zahlen eingibt und keine Texte.
Mit dem lässt sich so schwer rechnen!


Übung 4
Nur noch 1 Editfeld ist erlaubt!
Einen Button für = hinzufügen
Erfasse erste Zahl diese in einer Variable merken
Button drücken, was gerechnet werden soll und diesen merken
Erfasse zweite Zahl und diese in einer Variable merken
= Button drücken und das Ergebnis anzeigen

Geht schon Richtung Taschenrechner

Und wenn du einen richtigen Taschenrechner programmiert hast, solltest Du dich an den Parser wagen.
Der ist kniffeliger.....

Viel Spaß beim Üben :thumb:

Martin

xZise 11. Okt 2007 09:27

Re: Delphi Taschenrechner
 
;) Übung 3 fehlt :)

Zitat:

Zitat von Dr34m
Argh! What the hell ist "Substr: String" und was "S: String"

wie muss ich das denn da eingeben wenn ich ne rechnung von 18+3 im editfeld hab?
ich versteh nur noch bahnhof!

Wie deklariert man Variablen?
Wenn du das weisst ;) Dann wird das dir schnell klar sein :)

Dr34m 11. Okt 2007 11:49

Re: Delphi Taschenrechner
 
mdiehlz, deine Aufgaben haben mir viel geholfen...
Hätte jetzt aber mal ne Frage dazu, versteh den Fehler den mir die Unit sagt nicht :cry:

Das hab ich eingegeben: if label2.caption:='+' then edit1.text:=floattostr(zahl1+zahl2)
Und die Unit sagt: Ausdruckstyp muss Boolean sein.
Was heißt das jetzt für meine Bedingung bzw. wie muss ich sie umschreiben?

Nochmals vielen Dank an alle für die viele, aufgebrachte Geduld!

Apollonius 11. Okt 2007 11:56

Re: Delphi Taschenrechner
 
Ein Vergleich wird mit '=' durchgeführt. ':=' ist eine Zuweisung.

Dr34m 11. Okt 2007 12:02

Re: Delphi Taschenrechner
 
Danke euch allen, er funktioniert!
Kann zwar noch keine komplizierten Terme rechnen aber er läuft mit einem Editfeld!

quendolineDD 11. Okt 2007 12:36

Re: Delphi Taschenrechner
 
Lustig wirds doch wenn man -7 + -6 - -8 eingibt :-D
Kommt da bei dir auch -5 raus? :o)

Dr34m 11. Okt 2007 13:09

Re: Delphi Taschenrechner
 
tut es :)
kleine Frage noch. Wenn ich einen Button anlege, wie kann ich deklarieren dass er mit klick auf diesem Button das Program beendet? (Pascal befehl)

DeddyH 11. Okt 2007 13:15

Re: Delphi Taschenrechner
 
Close;

quendolineDD 11. Okt 2007 13:39

Re: Delphi Taschenrechner
 
Wenn du mehrere Forms hast bedenke, dass das Schließen der Hauptform zur Beendigung des gesamten Programmes bedeutet.

Delphi-Quellcode:
Form1.Close;
zum Beispiel :)

mdiehlz 11. Okt 2007 13:49

Re: Delphi Taschenrechner
 
Zitat:

Zitat von Dr34m
Danke euch allen, er funktioniert!
Kann zwar noch keine komplizierten Terme rechnen aber er läuft mit einem Editfeld!

Komplizierte Terme lassen sich nur mit einem Parser sinnvoll lösen.
Achtung, das Thema ist eher nicht für Anfänger geeignet.

Viele Anfänger machen den Fehler sich nicht mit grundlegenden Algorithmen zu beschäftigen.
Bei der Entwicklung eines Parsers sollte man halt schon ein paar kennen.
Es geht dabei weniger um fertigen Quellcode, sondern eher wie man das Problem am geschicktesten mit bewährten Verfahren löst.

Ich habe in meinem Bücherregal Algorithmen von R.Sedgewick stehen. Das Buch wurde vor über 15 Jahren geschrieben.
Ist zwar nicht mehr ganz zeitgemäß, aber auch nicht wirklich veraltet. Halt alles prozedural und nicht objektorientiert.

Wenn Englisch kein Problem ist, schaue dir mal dieses Buch an:
The Tomes of Delphi: Algorithms and Data Structures

Oder einfach mal nach dem Thema googeln.

Martin

Dr34m 11. Okt 2007 19:54

Re: Delphi Taschenrechner
 
Noch eine Frage: Wenn ich eine Zahl potenzieren will, benutzte ich ja am besten den befehl power. Wenn ich jedoch eingebe
edit1.text:=(power(zahl1,zahl2)
sagt er undefinierter Bezeichner 'power'.
Weiß keine Lösung dadrauf...

Progman 11. Okt 2007 20:51

Re: Delphi Taschenrechner
 
die Unit math in deine Uses-Klausel mit aufnehmen.

Dr34m 17. Okt 2007 16:28

Re: Delphi Taschenrechner
 
Hab Delphi 3.... :( kann die jemand Uppen?

DeddyH 17. Okt 2007 16:57

Re: Delphi Taschenrechner
 
Auch bei Delphi 3 gibt es die Unit math.

Dr34m 18. Okt 2007 10:08

Re: Delphi Taschenrechner
 
Also ich hab den ganzen Pc durchsucht und nichts gefunden.. oder hat die einen 'Decknamen' und heißt gar nicht math?

DeddyH 18. Okt 2007 10:16

Re: Delphi Taschenrechner
 
Schau mal im lib-Verzeichnis, da muss es eigentlich eine math.dcu geben.

Dr34m 18. Okt 2007 14:09

Re: Delphi Taschenrechner
 
....lzexpand.dcu, mapi.dcu, mask.dcu, menus.dcu ....
Leider keine math

DeddyH 18. Okt 2007 14:10

Re: Delphi Taschenrechner
 
Hast Du Delphi 3 Standard?

Dr34m 18. Okt 2007 15:30

Re: Delphi Taschenrechner
 
glaub schon
auf jeden ist die math unit net da. Wenn dann bitte jemand so freundlich wäre die zu uppen.

DeddyH 19. Okt 2007 08:38

Re: Delphi Taschenrechner
 
Zitat:

Zitat von Dr34m
Wenn dann bitte jemand so freundlich wäre die zu uppen.

Dieser Bitte wird wohl niemand nachkommen (dürfen), da es sich IMHO um einen Lizenzverstoß handeln würde. Aber ein kleiner Tipp: im Lieferumfang des schon oft erwähnten Buches "Delphi für Kids" befindet sich eine CD mit der Vollversion von Delphi 3 Professional. Als Restposten dürfte dieses Buch für ca. 12-13 EUR zu haben sein. Unter dem Aspekt, dass diese Version auch noch update-berechtigt ist, ist das eine lohnende Investition.

P.S.: Habe gerade ein ähnliches Buch vom selben Autor bei Amazon entdeckt: 3D-Programmierung mit Delphi für Kids

inherited 19. Okt 2007 09:19

Re: Delphi Taschenrechner
 
Vom gleichen Author: Game-Programming für Kids


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 Uhr.
Seite 1 von 2  1 2      

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