Text ausführen
-
Hallo,
weiß jemand wie ich nen String ausführen kann?
Ich hab ein Textfeld in das eine math. Formel eingegeben werden kann (z.B. "2+4*sqrt(9)").
Gibt es ne Möglichkeit das einfach so auszuführen und ein Ergebnis zurückzubekommen?
Grüße,
Mav
-
Hi Mav,
das Problem bei der Aufgabe ist ja, dass Du quasi dynamisch compilieren musst. Du liest einen String (mathematische Formel) ein und musst zur Laufzeit diesen Ausdruck verarbeiten.
Es gibt bestimmt eine elegantere Lösung aber um dieses Problem zu lösen aber hier ist eine die ich selber schon verwendet habe:Du schreibst Dir eine Template-Datei, die nur ein c++ (bzw. c) Grundgerüst enthält: (eine main funktion)
in diese fügst Du dann die eingelesene Formel noch ein und natürlich die entsprechenden Variablendeklarartionen. Dafür musst Du halt die Formel analysieren. (wenn es sich immer um ähnliche Aufgaben handelt ist das einfach, bei beliebigen Formeln ist das natürlich nicht so leicht zu realisieren)
Danach speicherst Du das Template als .cpp (bzw.c) Datei ab und rufst den Compiler aus Deinem Programm heraus auf und lässt die Datei compilieren und rufst sie danach auf.
In dem Template muss natürlich das Ergebnis der Formel in eine Datei geschrieben werden, die Du dann wieder auslesen kannst.
Einfach, oder?
Bei mir handelte es sich um Formeln die einen "feste" Form hatten und von da her war es nicht sehr schwer. (ca. 4 Std. für das gesamte Prog).
Wenn jemand einen einfacheren Weg kennt, dann nur her damit
-
Legolas:
Mav:
Dafür brauchst du einen mathematischen Parser.
-
@Tom: welchen Teil verstehst Du nicht?
1. Eigenes Prog erzeugt eine cpp Datei mit der entsprechenden Formel
2. Diese Datei wird während der Laufzeit (durch aufruf des Compilers) compiliert
3. Die exe wird ausgeführt
4. Das Ergebnis der Formel wurde in eine Datei geschrieben, welche nun ausgelesen werden kann.Ist vielleicht mit wenigen Worten net super verständlich, aber das Prinzip sollte doch klar sein, oder??
Und funktionieren tuts auch noch
-
Hat aber nichts mit der Frage von mav zu tun.
Was er braucht ist eine Funktion welche einen String entgegen nimmt und die Mathematische Funktion dann berechnet.
-
Klar hat es was mit der Frage zu tun!
Du hast natürlich recht (habe ich aber auch geschrieben) die programmiertechnisch "richtige" (wenn man das sagen kann) Vorgehensweise wäre ein mathematischer Parser.
Aber das Problem kann genauso mit meiner Methode gelöst werden, wenn Performance keine Rolle spielt.Es wird auch der String eingelesen zur Laufzeit berechnet und das Ergebnis zurückgeliefert. Ist alles eine Frage der Zeit die man reinstecken will. Wie
gesagt nach 4 Stunden (maximal) hat mein Prog genau das gemacht was Mav gerne hätte ...
-
-
Hey, es musste schnell gehen und es war kein Internetzugang für evtl. Fragen oder Suche nach einem Parser vorhanden...
Die Aufgabe musste unbedingt bis abends fertig sein und das war sie dann auchWie gesagt, wenn es nicht um Performance geht ?!?!
Ich hoffe ihr habt euch wieder beruhigt und könnt weiterarbeiten
Bin gerne wieder bereit euch zu unterhalten :p
-
Danke für Eure rege Beteiligung!
Ich hab mich im Netz nun mal nach nem Mathe-Parser umgesehen und bin dann hier fündig geworden (mal schauen ob er so tut...):
http://www.ad-factum.de/tips/fparser/@Legolas:
Die Idee ist nicht schlecht! Muss man erst mal draufkommenGrüße,
Mav
-
LOL Legolas, nicht jeder enduser hat nen compiler, also total schwachsinnig fallss du des ernst gemeint hast *gg*
-
Logisch hab ich das ernst gemeint. Ich will ja auch net, dass mich hier jemand ver*****t.
Oh mann, klar kann er sowas net verkaufen oder dergleichen. Was weis denn ich für was er das einsetzen will. Aber ich denke mal, dass wenn er es in einem kommerziellen Produkt einsetzen will selber so schlau ist und diese Methode net nimmt. Wenn es jedoch nur eine Art Hilfstool sein soll (wei es bei mir der Fall war) um irgendwelche Formeln (die sich ständig ändern können) mit unterschiedlichen Werten zu testen, dann ist das vollkommen ausreichend.
--> Was wiederum die Frage nach dem Compiler auch schon beantwortet.
Hilfstool --> eigener Rechner --> Visual Studio --> Microsoft CompilerIch weis gar net was ihr habt, es ist vielleicht eine etwas unübliche Lösung aber wenn Du keine anderen Hilfsmittel als das Visual Studio mit den MFC (und keine Zeit) hast, dann musst man halt improvisieren. Hauptsache das Ergebnis stimmt.
Wir können aber gerne noch weiter diskutieren ...
-
Is aufjedenfall ne ausgefallene IDee. Man wird aber auf so einige Probleme stoßen, man will ja nicht die ganze EXE neu erstellen oder wie. Oder hat man die andewrn Teile des Programmes schon in .obj-Dateien und nur noch die mit der formel wird compilietrt und des zeugs wird anschließend gelinkt. Du weißt schon was ich meine *g*
-
Du denkst schon etwas zu kompliziert.
Die erstellte Datei kann ja z.B. nur eine .c Datei sein.
Die Funktion in Deinem Prog sieht ungefähr so aus Pseudocode:Berechne_Formel_Funktion
erstelle und öffne Datei Formel.c;
schreibe: void main(void)
dann irgendwelche Initialisierungen falls in der Formel Variablen sind.
schreibe: "Stringinhalt"
schreibe Ergebnis in txt-Datei
EndeDann musst Du nur die Formel.c compilieren und ausführen ... und natürlich die txt-Datei auslesen.