Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Taschenrechner - String durchsuchen (https://www.delphipraxis.net/148363-taschenrechner-string-durchsuchen.html)

Speedi2000 28. Feb 2010 14:04


Taschenrechner - String durchsuchen
 
Hallo liebe Community.
Wir haben in der Schule grade mit Delphi angefangen, und sollen nun einen Taschenrechner programmieren.

Nun stehe ich allerdings vor dem Problem mit Punkt- vor Strichrechnung.

Habe jetzt ein Label in dem der Gesamte Term steht der Berechnet werden soll also zB.:
Zitat:

1+2*3-4/2
Jetzt will ich halt dass als Ergebnis 5 rauskommt und nicht 2,5.

Ich selber Programmiere seit Jahren in PHP deswegen kam ich auch auf die Idee das so zu machen, dass ich am Ende den ganzen String nach den Operationszeichen durchsuche und dann jeweils die Zahl davor und dannach miteinander addiere, subtrahiere, multipliziere oder dividiere.

Leider weiß ich nur nicht wie ich das in Delphi realisieren kann.

Danke für die Hilfe.
Tobias

Spezi 28. Feb 2010 14:08

Re: Taschenrechner - String durchsuchen
 
Hmm, damit habe ich mich vor kurzem auch beschäftigt, ich weiß zwar nicht ob meine Lösung optimal ist, aber mein Prinzip war, dass ich es rekursiv löse.
Zuerst suchte ich nach dem +
Wenn ich das gefunden habe sagt ich, dass es die beiden Teilstrings addieren soll.
Die wurden natürlich wiederum von meiner Funktion zerlegt.

Ich weiß jetzt nicht, ob ich es richtig erklärt habe, aber so in etwa habe ich es durchgeführt :wink:

Speedi2000 28. Feb 2010 14:25

Re: Taschenrechner - String durchsuchen
 
Ja ich wollt ganz gerne die Funktion in Delphi wissen um dies zu realisieren x)

Spezi 28. Feb 2010 14:25

Re: Taschenrechner - String durchsuchen
 
Da gibt es meines Wissens keine, das musst du schon selbst realisieren :wink:

Speedi2000 28. Feb 2010 14:42

Re: Taschenrechner - String durchsuchen
 
Könnte mir dann bitte jemand nen Tipp geben wie?

Wie gesagt wir haben grade erst mit Delphi angefangen :(

Danke
Tobias

patti 28. Feb 2010 14:48

Re: Taschenrechner - String durchsuchen
 
Hi und willkommen in der DP ;-)

Zitat:

Zitat von Speedi2000
Wir haben in der Schule grade mit Delphi angefangen, und sollen nun einen Taschenrechner programmieren.

Das sog. "Parsen", also das Umwandeln eines Strings in eine für den Computer lesbare Form und die anschließende Berechnung, ist aber kein Projekt für "Anfänger". Da gehört einiges dazu und man muss einiges beachten. Bist du dir sicher, dass ihr einen Taschenrechner programmieren sollt, der Terme ausflösen kann :?: Ich würde einfach mal behaupten, dass ein richtiger Parser den schulischen Rahmen sprengt, denn das ist komplexer, als man auf Anhieb vermutet.

Wenn du dich wirklich daran versuchen willst, dann musst du dir vorher genaue Gedanken machen, wie du das angehen willst. Da gibt es sicherlich mehrere Möglichkeiten, die man verfolgen kann, aber letzendlich musst du alles selber machen, Delphi nimmt dir da im ersten Moment nichts ab.

Alternativ kannst du mal in der DP nach "Parser" suchen, da sollte sich inzwischen einiges finden lassen.

mfg

Edit: Hab gerade mal bei meinem Parser, den ich vor Kurzem geschrieben habe, nachgeschaut. Die Unit hat exakt 732 Zeilen (gut, der kann noch etwas mehr, wie z.B. Klammern, Funktionen, ...). Daran sieht man aber doch sehr deutlich, was da für eine Arbeit dahintersteckt.

Edit2: Zu deiner Frage: Mit Delphi-Referenz durchsuchenPos kannst du einen Substring innerhalb eines gegebenen Strings suchen. Wenn die Funktion einen Wert, der größer als 0 ist, zurückliefert, dann entspricht der Wert der ersten gefundenen Stelle des Substrings im String. Du könntest versuchen, zuerst alle Multiplikationszeichen zu behandeln. Dazu suchst du einfach in dem String das '*'-Zeichen. Wenn der Wert > 0 ist, dann existiert so ein Zeichen. Anschließend musst du ausgehend von dieser Stelle in beide Richtungen solange den String Zeichen für Zeichen durchgehen, bis du ein Zeichen erreichst, welches keine Zahl ist. Wenn du dazu Fragen haben solltest, dann kannst du sie hier gerne stellen.

Speedi2000 28. Feb 2010 14:59

Re: Taschenrechner - String durchsuchen
 
Naja uns wurde halt gesagt wir sollen Punkt vor Strichrechnung beachten.

Auf die Idee mit dem String bin ich ja gekommen weil ichs von PHP her kannte.
Vll könnte man das aber auch so realisieren, dass man immer ne Zahl speichert und dann jeweils das Rechenzeichen und dann nochmal die Zahl und das nächste Rechnezeichen.

Also ich muss das nicht über die Methode machen dass ich den kompletten Term dann durchsuche. Es soll halt nur Punkt vor Strichrechnung beachtet werden.
Wenns ne Möglichkeit gibt, die einfacher ist, nehm ich die gerne :)

patti 28. Feb 2010 15:07

Re: Taschenrechner - String durchsuchen
 
Hast du schon meinen Edit in meinem oberen Post bemerkt?

Da hab ich nämlich einen Ansatz, mit dem man das relativ einfach lösen kann, genannt. Besorge dir erstmal die Stelle des ersten *-Zeichens in deinem String (Erklärung siehe oben). Wenn du das geschafft hast, dann kannst du dich an den nächsten Schritt wagen.

Speedi2000 28. Feb 2010 16:08

Re: Taschenrechner - String durchsuchen
 
Delphi-Quellcode:
muh.caption := pos('+',term.caption);
Zitat:

[Fehler] taschenrechner.pas(451): Inkompatible Typen: 'String' und 'Integer'
Zeigt er mir an, ich weiß nicht, was ich falsch gemacht habe =/

DeddyH 28. Feb 2010 16:10

Re: Taschenrechner - String durchsuchen
 
Schau mal in der Hilfe, was Pos zurückgibt, dann weißt Du auch, was Du falsch gemacht hast.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 Uhr.
Seite 1 von 4  1 23     Letzte »    

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