Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi string in eine rechnung umwandeln möglich? (https://www.delphipraxis.net/81716-string-eine-rechnung-umwandeln-moeglich.html)

gandime 2. Dez 2006 13:32


string in eine rechnung umwandeln möglich?
 
hi
ich wollte mal fragen ob man einen string z.b. '15*23-5/2' in eine rechnung umwandeln und ausrechnen kann (natürlich sollten auch die ( potenz . - regeln dabei gelten)?

mfg gandime

Thorben_K 2. Dez 2006 13:55

Re: string in eine rechnung umwandeln möglich?
 
wir hatten so was mal in deer schule, da gibts ne unit die das kann, such mal nach der unit : fktunit. keine ahnung wo es die gibt, hat unser lehrer uns mal gegeben, und bin mir eig sicher das der die net selber geschrieben hat^^

wenn du das selber machen willst, musst du halt jeden char des strings untersuchen, ob eine eine zahl, eine operator (+ - * / ) ist, und das dann umsetzten, ist auf jeden fall möglich ;D

3_of_8 2. Dez 2006 14:02

Re: string in eine rechnung umwandeln möglich?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Du brauchst dafür einen Parser.

Hier im Forum suchenParser, Hier im Forum suchenMathe Parser

Wenn du schon etwas fortgeschritten bist, kannst du auch selber einen schreiben, ist eigentlich nix anderes als rekursiv durch den String gehen, also einen Binärbaum/n-Baum aufstellen.

Man kann sagen du hast die Symbole () zur Strukturierung, + - * / ^ mod als Operatoren, 0-9 als Zeichen zur Bildung numerischer Konstanten und A-z (evtl. auch ÄÖÜäöü) zur Bildung von Variablen.

In der theoretischen Informatik nennt man das glaube ich ein Kalkül.

Du löst dann den String in lauter einzelne Rechnungen auf, also "3*a+b/c+(d-c)^2" wird zu dem Binärbaum im Anhang.

Martin K 2. Dez 2006 14:16

Re: string in eine rechnung umwandeln möglich?
 
Sowas sollten wir auch mal in der Schule machen, also praktisch einen eigenen Parser schreiben.
Und ja, das geht genauso wie 3_of_8 es beschrieben hat :wink:

Cöster 2. Dez 2006 20:08

Re: string in eine rechnung umwandeln möglich?
 
Ja, entweder so, oder (imho eleganter) mit zwei Stacks: In einem werden die Operatoren gespeichert, in dem anderen die Operanden. Vorteil davon ist, dass man den String dabei nur ein einziges mal von vorne bis hinten lesen muss. Man packt die Operanden und Operatoren dabei gleichzeitig in den entsprechenden Stack. Sobald der aktuell überprüfte Operator im String eine niedrigere Priorität hat als der, der ganz oben auf dem Stack liegt, kann man die oberen Elemente des Stacks bereits zusammenfassen.
Dazu braucht man natürlich außerdem noch einen Puffer, in dem gelegentlich etwas zwischengespeichert wird.

3_of_8 2. Dez 2006 21:55

Re: string in eine rechnung umwandeln möglich?
 
Bei meiner Variante muss das ganze auch nur einmal gemacht werden. ;)

Ein Baum erlaubt außerdem viel schönere Schweinereien mit der geparsten Formel. ;)

Cöster 2. Dez 2006 22:02

Re: string in eine rechnung umwandeln möglich?
 
Zitat:

Zitat von 3_of_8
Ein Baum erlaubt außerdem viel schönere Schweinereien mit der geparsten Formel. ;)

Was für "Schweinereien" willst du mit dem String denn anstellen?

3_of_8 2. Dez 2006 22:08

Re: string in eine rechnung umwandeln möglich?
 
Funktionen und Operatoren mit variabler Parameter-/Operandenzahl zum Beispiel. Und ich weiß nicht so ganz, wie du das mit Klammern hinkriegen willst mit Stacks.

Cöster 2. Dez 2006 22:33

Re: string in eine rechnung umwandeln möglich?
 
Zitat:

Zitat von 3_of_8
Und ich weiß nicht so ganz, wie du das mit Klammern hinkriegen willst mit Stacks.

Die öffnenden Klammern kommen auch in den Operatoren-Stack. Sobald eine schließende Klammer gelesen wird, kann der obere Operand aus dem Operanden-Stapel im Puffer gespeichert werden, über den obersten Operator mit dem jetzt obersten Operanden kombiniert und an dessen Stelle in den Operanden-Stapel gelegt. Und das ganze so lange, bis die öffnende Klammer ganz oben im Operator-Stack liegt.

dizzy 4. Dez 2006 01:50

Re: string in eine rechnung umwandeln möglich?
 
Beide Verfahren sind am End sehr gleichwertig, sowohl was Laufzeitverhalten, als auch Ausbaufähigkeit angeht. Manche Disziplinen sind im Baum einfacher zu lösen, andere wieder im Stack, aber keiner der zwei lässt sich als pauschal "besser" oder "schneller" bezeichnen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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