Laden...

[gelöst] String in mathem. Anweisung

Erstellt von Bit2_Gosu vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.498 Views
B
Bit2_Gosu Themenstarter:in
116 Beiträge seit 2007
vor 15 Jahren
[gelöst] String in mathem. Anweisung

Hi!

Gibt es eine Möglichkeit, einen mathematischen Ausdruck inform eines Strings in einen tatsächlichen mathematischen Ausdruck umzuwandeln und letzteren anzuwenden?

public double berechne(String s)
{
   //wandle s um in tatsächlichen Ausdruck "a"
   return a;
}

Man übergibt einer solchen Funktion zum Beispiel den String "3*(3+4)-2"
und die Funktion gibt das Ergebnis 19 zurück.

Geht sowas?

U
102 Beiträge seit 2008
vor 15 Jahren

klar geht sowas.. muss man nur selba schreiben 😁

ich hab da mal was vorbereitet:

Does Visual Studio Rot the Mind?

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Bit2_Gosu,

das Thema wurde schon öfter Male besprochen. Bitte benutze die Forumssuche (Stichwort: z.B. eval) und poste die besten Treffer hier. Vielen Dank!

herbivore

B
Bit2_Gosu Themenstarter:in
116 Beiträge seit 2007
vor 15 Jahren

danke für den code. ehrlich gesagt kann ich mit der suche nichts finden.

Warum muss man aber selber einen Parser schreiben und kann nicht den in C# integrierten benutzen?

1.200 Beiträge seit 2007
vor 15 Jahren

Weil C# eine kompilierte Sprache ist und nicht interpretiert wird.

Vielleicht findest du im CodeDOM namespace irgendwas was dir hilft. Vielleicht gibt es dort irgendwas um den String zu parsen und in IL Code zu kompilieren, den du dann z.B. in ein "in-memory" Assembly schreiben kannst.

Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!

YARRRRRR!

S
119 Beiträge seit 2008
vor 15 Jahren

Man kann schon den C# Parser verwenden is aber umständlich 😉 Ich hab das irgendwo mal gesehen wenn ich zuhause bin such ich das mal für dich raus

"2 Dinge sind unendlich die Dummheit der Menschen und das Universum, aber beim Universum bin ich mir noch nicht so ganz sicher."

  • Albert Einstein
265 Beiträge seit 2006
vor 15 Jahren

-=MasterMax=-

B
Bit2_Gosu Themenstarter:in
116 Beiträge seit 2007
vor 15 Jahren

danke erstmal, ich werd mir das mal anhören!

B
Bit2_Gosu Themenstarter:in
116 Beiträge seit 2007
vor 15 Jahren

so, ich habe jetzt mithilfe des Videos eine Klasse geschrieben (Function), der man eine Funktion in Form eines string zuweisen kann. Beispiel:

2x*sqrt(x)+(2+2)(x+3)

Mit getValue(4) bekommt man den Funktionswert von x=4 etc.
Die Klasse Function benötigt die Klasse FormattedFunctionString.

Als Parser wird der interne c# compiler verwendet. Es werden alle Funktionen aus System.Math sowohl in Groß-als auch in Kleinschreibung akzpetiert - Multiplikatorzeichen werden situationsbedingt automatisch hinzugefügt.

Da ich noch Anfänger bin, würde ich mich über Kritik natürlich freuen 😉

265 Beiträge seit 2006
vor 15 Jahren

Hi Bit2_Gosu,

ich hab letztes Jahr für meine Facharbeit ebenfalls einen Parser der via. Kompilierung zur Laufzeit arbeitet geschrieben.
Hab jetzt deinen Source nicht getestet, aber schaut ganz gut und übersichtlich aus.

Was ich da noch dazuprogrammiert habe, war, dass geprüft wird, ob es Sinn macht den Datentyp decimal zu verwenden (falls du Wert auf Genauigkeit legst). Wenn ja, dann hat er decimal gerechnet.

Nochwas: wenn du z.B. "1/3" berechnen lässt: gibt er dann richtig 0,33 zurück, oder 0, weil er die Zahlen als Integer nimmt? Ich musste da ne Funktion schreiben, die im String nach zusammenhängenden Zahlen sucht und dann ein d(bzw. m) dahinter schreibt, um diesen Fehler zu umgehen.

-=MasterMax=-

B
Bit2_Gosu Themenstarter:in
116 Beiträge seit 2007
vor 15 Jahren

die beiden Ideen sind gut, die hab ich noch nicht drin!

werd ich wohl noch integrieren.