![]() |
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 |
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 |
Re: string in eine rechnung umwandeln möglich?
Liste der Anhänge anzeigen (Anzahl: 1)
Du brauchst dafür einen 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. |
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: |
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. |
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. ;) |
Re: string in eine rechnung umwandeln möglich?
Zitat:
|
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.
|
Re: string in eine rechnung umwandeln möglich?
Zitat:
|
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 00:20 Uhr. |
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