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?
klar geht sowas.. muss man nur selba schreiben 😁
ich hab da mal was vorbereitet:
Does Visual Studio Rot the Mind?
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
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?
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!
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."
-=MasterMax=-
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 😉
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=-
die beiden Ideen sind gut, die hab ich noch nicht drin!
werd ich wohl noch integrieren.