AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi string in eine rechnung umwandeln möglich?
Thema durchsuchen
Ansicht
Themen-Optionen

string in eine rechnung umwandeln möglich?

Ein Thema von gandime · begonnen am 2. Dez 2006 · letzter Beitrag vom 4. Dez 2006
Antwort Antwort
Seite 1 von 2  1 2      
gandime
(Gast)

n/a Beiträge
 
#1

string in eine rechnung umwandeln möglich?

  Alt 2. Dez 2006, 14:32
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
  Mit Zitat antworten Zitat
Thorben_K

Registriert seit: 22. Okt 2006
Ort: Darmstadt
105 Beiträge
 
Delphi 2006 Professional
 
#2

Re: string in eine rechnung umwandeln möglich?

  Alt 2. Dez 2006, 14:55
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
Thorben
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: string in eine rechnung umwandeln möglich?

  Alt 2. Dez 2006, 15:02
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.
Miniaturansicht angehängter Grafiken
baum_850.png  
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: string in eine rechnung umwandeln möglich?

  Alt 2. Dez 2006, 15:16
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
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: string in eine rechnung umwandeln möglich?

  Alt 2. Dez 2006, 21:08
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.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: string in eine rechnung umwandeln möglich?

  Alt 2. Dez 2006, 22:55
Bei meiner Variante muss das ganze auch nur einmal gemacht werden.

Ein Baum erlaubt außerdem viel schönere Schweinereien mit der geparsten Formel.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: string in eine rechnung umwandeln möglich?

  Alt 2. Dez 2006, 23:02
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?
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: string in eine rechnung umwandeln möglich?

  Alt 2. Dez 2006, 23:08
Funktionen und Operatoren mit variabler Parameter-/Operandenzahl zum Beispiel. Und ich weiß nicht so ganz, wie du das mit Klammern hinkriegen willst mit Stacks.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: string in eine rechnung umwandeln möglich?

  Alt 2. Dez 2006, 23:33
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.
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: string in eine rechnung umwandeln möglich?

  Alt 4. Dez 2006, 02:50
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.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:17 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