Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Klammern aus einen String entfernen (https://www.delphipraxis.net/38812-klammern-aus-einen-string-entfernen.html)

tavoc 24. Jan 2005 15:14


Klammern aus einen String entfernen
 
Hallo,

ich schreibe grade ein Programm welches u.a. eine Funktionsanalyse macht ( also ableiten, Nullstellen usw.).
Jedoch habe ich da ein problem.

Der mathematische Ausdruck wird über ein Memo also string eingelesen und dann in die einzelnen Bestandteile aufgesplittet.

Könnt ihr mir einen Denkanstoß geben wie ich eine Funktion realisiere die mir alle Klammern in diesem string ausklammert.
Also z.b y=(3x+7)*2-(23x^12-3*8 )/5, das dann rauskommt y=6x+14-23/5x^12-24/5 .

Ich finde einfach keinen Ansatz wie ich dieses Problem lösen kann.


Thx

Wuaegner 24. Jan 2005 15:28

Re: Klammern aus einen String entfernen
 
Hi,
Was meinst du mit "die einzelnen Bestandteile aufgesplittet" ?
Zerteilst du den Ausdruck nur in seine chars oder wird gleich was da und dort abgelegt und evtl. berechnet?
Um nämlich auszumultiplizieren musst du z.B Punkt-vor-Strich Rechnung beachtn usw.
Hast du das schon realisiert?

shmia 24. Jan 2005 15:35

Re: Klammern aus einen String entfernen
 
Zitat:

Zitat von tavoc
ich schreibe grade ein Programm welches u.a. eine Funktionsanalyse macht ( also ableiten, Nullstellen usw.).
Der mathematische Ausdruck wird über ein Memo also string eingelesen und dann in die einzelnen Bestandteile aufgesplittet.

Könnt ihr mir einen Denkanstoß geben wie ich eine Funktion realisiere die mir alle Klammern in diesem string ausklammert.
Also z.b y=(3x+7)*2-(23x^12-3*8 )/5, das dann rauskommt y=6x+14-23/5x^12-24/5

Einfach nur alle Klammern entfernen würde ja den orginalen Ausdruck verfälschen!!
Du brauchst einen "Symbolic Evaluator".
Du möchtest dieses Ding anscheinend selbst programmieren; das ist aber nicht so einfach!

http://www.efg2.com/Lab/Library/Delp...ns/Parsers.htm
http://homepages.borland.com/torry/expressions.htm
Suchwörter: Bei Google suchensymbolic ANd evaluator AND delphi

tavoc 24. Jan 2005 15:39

Re: Klammern aus einen String entfernen
 
Also bisher macht der das so:

wenn ich zb. das hier eingebe: y=3x^6+2x+3 dann wird das in 2 Felder aufgeteilt.
Eins für die Faktoren und eins für die Exponenten.


Also z.b

faktor[1]=3
exponent[1]=6
faktor[2]=+2
...

Zurzeit habe ich noch keine richtige Punkt vor Strich rechnung drin, aber ich weiß wie ich das mache, zurzeit funktioniert mein programm nur bis x^3 (deshalb möchte ich es erweitern) und da habe ich noch keine Punkt vor Strich Rechnung benötigt.

Berechnet wird dann in einer anderen Funktion die die beiden Felder überreicht bekommt.

Ultimator 24. Jan 2005 15:40

Re: Klammern aus einen String entfernen
 
Angenommen, du hast den Term
Code:
c=3*(6+7)
Zuerst solltest du dir sowas wie nen Stack anlegen, geht damit wunderbar ;-)
Dann legst du dir die 3 auf den Stack und suchst nach einem Operator (in dem Fall das *)
Danach musst du halt nach der "Klammer auf" suchen und nach der "Klammer zu"
Alles dazwischen ist dann zuerst auszurechnen.
Wenn du dann die 13 ausgerechnet hast, multiplizierst du sien mit dem Wert, der auf dem Stack liegt, also der 3.
Die Sachen mit mehreren Schachtel-Klammern folgen halt (wie heißt es so schön :mrgreen:) analog.

Also alles gar nicht mal soo schwierig :zwinker:

jfheins 24. Jan 2005 15:58

Re: Klammern aus einen String entfernen
 
Um damit einen sinnvolleren Titel zu provozieren,
folgender Quellcode zur Lösung des Problems:
Delphi-Quellcode:
AnsiReplaceStr (Text, '(', '');
AnsiReplaceStr (Text, ')', '');
:mrgreen:

P.S. Herzlich Willkommen in der DP ! :firejump:

SirThornberry 24. Jan 2005 16:31

Re: Klammern aus einen String entfernen
 
Zitat:

Zitat von jfheins
Um damit einen sinnvolleren Titel zu provozieren,
folgender Quellcode zur Lösung des Problems:
Delphi-Quellcode:
AnsiReplaceStr (Text, '(', '');
AnsiReplaceStr (Text, ')', '');

nicht ganz richtig denn es handelt sich um eine funktion deren rückgabewert natürlich auch zugewiesen werden sollte
Delphi-Quellcode:
Text := AnsiReplaceStr (Text, '(', '');
Text := AnsiReplaceStr (Text, ')', '');

jfheins 24. Jan 2005 18:33

Re: Klammern aus einen String entfernen
 
Oh Gottt, nicht mal das krieg' ich hin. :oops: Ich sollte heute früher ins Bett gehen ...

Wuaegner 24. Jan 2005 19:38

Re: Klammern aus einen String entfernen
 
Als Beispiel, wenn du's mit Stacks machn willst, hab ich in der Open Source Sparte einen TR gepostet der mit Stacks arbeitet und so Punkt-Vor-Strich-Rechnung kann. Den um Klammern zu erweitern dürfte kein unlösbares Problem darstellen.

tavoc 24. Jan 2005 20:03

Re: Klammern aus einen String entfernen
 
Danke,

ich werde mir das mal morgen angucken.


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