![]() |
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 |
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? |
Re: Klammern aus einen String entfernen
Zitat:
Du brauchst einen "Symbolic Evaluator". Du möchtest dieses Ding anscheinend selbst programmieren; das ist aber nicht so einfach! ![]() ![]() Suchwörter: ![]() |
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. |
Re: Klammern aus einen String entfernen
Angenommen, du hast den Term
Code:
Zuerst solltest du dir sowas wie nen Stack anlegen, geht damit wunderbar ;-)
c=3*(6+7)
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: |
Re: Klammern aus einen String entfernen
Um damit einen sinnvolleren Titel zu provozieren,
folgender Quellcode zur Lösung des Problems:
Delphi-Quellcode:
:mrgreen:
AnsiReplaceStr (Text, '(', '');
AnsiReplaceStr (Text, ')', ''); P.S. Herzlich Willkommen in der DP ! :firejump: |
Re: Klammern aus einen String entfernen
Zitat:
Delphi-Quellcode:
Text := AnsiReplaceStr (Text, '(', '');
Text := AnsiReplaceStr (Text, ')', ''); |
Re: Klammern aus einen String entfernen
Oh Gottt, nicht mal das krieg' ich hin. :oops: Ich sollte heute früher ins Bett gehen ...
|
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.
|
Re: Klammern aus einen String entfernen
Danke,
ich werde mir das mal morgen angucken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:07 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