AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi Taschenrechner

Ein Thema von Dr34m · begonnen am 7. Okt 2007 · letzter Beitrag vom 19. Okt 2007
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#11

Re: Delphi Taschenrechner

  Alt 7. Okt 2007, 19:57
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
Karl-Heinz
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Delphi Taschenrechner

  Alt 7. Okt 2007, 19:58
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
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Dr34m

Registriert seit: 7. Okt 2007
12 Beiträge
 
#13

Re: Delphi Taschenrechner

  Alt 7. Okt 2007, 20:31
Und wie durchsuche ich?!
mit if... then?

bitte mal ein beispiel, falls es if... then ist wie das dann in der unit aussieht.
Lukas Nennstiel
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Delphi Taschenrechner

  Alt 8. Okt 2007, 16:17
Benutze mal die Forensuche, Nach Zeichen suchen kannst du mit Delphi-Referenz durchsuchenPos und PosEx, Teile eines Stringskopieren mit Delphi-Referenz durchsuchenCopy
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Delphi Taschenrechner

  Alt 8. Okt 2007, 16:27
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.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: Delphi Taschenrechner

  Alt 8. Okt 2007, 16:29
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...
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Dr34m

Registriert seit: 7. Okt 2007
12 Beiträge
 
#17

Re: Delphi Taschenrechner

  Alt 10. Okt 2007, 21:42
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!
Lukas Nennstiel
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#18

Re: Delphi Taschenrechner

  Alt 10. Okt 2007, 21:47
OMG.... Dr34m, du solltest dich erst mal mit den Grundlagen der Delphi-Programmierung befassen
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Delphi Taschenrechner

  Alt 10. Okt 2007, 22:26
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.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
mdiehlz

Registriert seit: 6. Sep 2006
Ort: Feldatal
30 Beiträge
 
Delphi 10 Seattle Enterprise
 
#20

Re: Delphi Taschenrechner

  Alt 11. Okt 2007, 09:45
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?

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.

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

Martin
Martin Diehl
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:52 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