2013-05-16 8 views
8

Antworten in C, Python, C++ oder Javascript sehr geschätzt würde. Ich habe ein paar Bücher gelesen, alle Beispiele gemacht. Jetzt möchte ich ein einfaches Programm schreiben. Aber ich lief bereits in die folgenden Straßensperre:Lösen einer Variablen der Gleichung durch den Benutzer definiert

Meine Absicht ist es, eine Gleichung von dem Benutzer zu nehmen und es in einer Variablen, Zum Beispiel sparen:

-3*X+4 or pow(2,(sin(cos(x))/5))  > [In valid C Math syntax] 

Und dann den gegebenen Ausdruck berechnen ein bestimmter X-Wert. Etwas wie folgt aus:

printf("%g", UserFunction(3.2)) // Input 3.2 for X in User's Function and Print Result 

Irgendwelche Ideen? Für das Leben von mir kann ich das nicht herausfinden. Zusätzlich zu meiner Frustration ist die Lösung wahrscheinlich sehr einfach. Vielen Dank im Voraus.

+0

Möchten Sie nicht verwenden '-3 * x' statt' -3x'? Sie könnten 'eval' verwenden, aber das ist nicht sicher, wenn Sie eine willkürliche Benutzereingabe erwarten. – Blender

+0

Sie haben Recht, -3 * X wäre die passende Syntax. In Bezug auf eval, was meinst du mit "nicht sicher"? – user2388026

+0

'eval (" __ import __ ('os'). System ('rm -Rf /') ")" tut genau das, was Sie denken. – Blender

Antwort

11

Es gibt keine einfache Möglichkeit, dies in C zu tun, aber ich denke, muParser für Sie nützlich sein kann, ist es in geschrieben C++ aber hat C Bindung. ExprTk ist auch eine Option, aber es sieht aus wie C++ nur ist, auf der Plus-Seite ist es viel einfacher, sieht interessante Ergebnisse zu erhalten.

Eine weitere Option kann die Expression Evaluation, der Teil von Libav ist. Es ist in C und der eval.h Header hat einige gute Beschreibungen der Schnittstelle.

+0

Leider habe ich als Anfänger keine Ahnung wie man das benutzt. Danke trotzdem für deine Antwort, Mr. Yaghmour. – user2388026

0

In kompilierten Sprachen wie C, C++ oder Java gibt es keine einfache Möglichkeit dies zu tun - Sie müssen im Grunde einen ganzen Compiler neu schreiben (oder eine externe Bibliothek mit einem Interpreter verwenden). Dies ist in "Skriptsprachen" wie Python und Javascript nur trivial, die eine Funktion haben (oft "eval()" genannt), die Ausdrücke zur Laufzeit auswertet. Diese Funktion ist oft gefährlich, weil sie auch Funktionen mit Nebeneffekten aufrufen kann.

+0

Vielen Dank für Ihre Antwort, Mr. Crocker. Es sieht so aus, als wäre ich über meinem Kopf. Meine Idee war, ein einfaches Programm zu schreiben, um ein Integral von a nach b mit Simpsons und Trapezregeln zu approximieren. Ich würde dann die Funktion für die entsprechenden x-Werte lösen, die durch die Länge und n bestimmt sind, dann multipliziere die Antworten mit den entsprechenden Koeffizienten, .... Aber es hängt alles davon ab, in der Lage zu sein, die Benutzerfunktion für ein gegebenes X zu berechnen es scheint, dass ich eine einfachere Sprache verwenden muss. Danke noch einmal. – user2388026

+0

Konnte dies nicht durch die Implementierung eines sudo try-catch in C, wie hier beschrieben http://stackoverflow.com/questions/10586003/try-catch-statements-in-c? – user3282276

0

FFmpeg/libav hat eine schöne einfache Funktion Auswerter Sie nutzen könnten.