2013-05-16 21 views
8

Le risposte in C, Python, C++ o Javascript sarebbero molto apprezzate. Ho letto alcuni libri, ho fatto tutti gli esempi. Ora mi piacerebbe scrivere un programma semplice. Ma, ho già corse in seguito posto di blocco:Risolvere una equazione variabile definita dall'utente

La mia intenzione è quella di prendere un'equazione da parte dell'utente e salvarlo in una variabile, Ad esempio:

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

e quindi calcolare l'espressione data per un certo valore X. Qualcosa di simile a questo:

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

Tutte le idee? Per la vita di me, non riesco a capirlo. Aggiungendo alla mia frustrazione, la soluzione è probabilmente molto semplice. Grazie in anticipo.

+0

Non potresti usare '-3 * x' invece di' -3x'? Potresti usare 'eval', ma non è sicuro se ti stai aspettando un input arbitrario da parte dell'utente. – Blender

+0

Hai ragione, -3 * X sarebbe la sintassi appropriata. Per quanto riguarda la valutazione, cosa intendi con "non sicuro"? – user2388026

+0

'eval (" __ import __ ('os'). System ('rm -Rf /') ")' fa proprio quello che pensi che faccia. – Blender

risposta

11

Non c'è un modo semplice per fare questo in C ma penso muParser può essere utile a te, è scritto in C++ ma ha C vincolante. ExprTk è anche un'opzione ma sembra che sia C++ solo, sul lato positivo sembra molto più facile ottenere risultati interessanti con.

Un'altra opzione può essere Expression Evaluation che fa parte di Libav. È in C e l'intestazione eval.h ha alcune buone descrizioni dell'interfaccia.

+0

Purtroppo, da principiante non ho idea di come usarlo. Grazie comunque per la tua risposta, signor Yaghmour. – user2388026

0

In linguaggi compilati come C, C++ o Java non esiste un modo semplice per farlo: è necessario riscrivere un intero compilatore (o utilizzare una libreria esterna con un interprete). Questo è banale solo nei linguaggi "scripting" come Python e Javascript, che hanno una funzione (spesso chiamata "eval()") che valuta le espressioni in fase di runtime. Questa funzione è spesso pericolosa, perché può anche fare cose come le funzioni di chiamata con effetti collaterali.

+0

Grazie per la risposta, signor Crocker. Sembra che io sia sopra la mia testa. La mia idea era di scrivere un semplice programma per approssimare un integrale da a a b usando la regola di Simpson e Trapezoid. Quindi risolverei la funzione per i valori x appropriati determinati dalla lunghezza e n, quindi moltiplicare le risposte per i coefficienti appropriati, .... Ma tutto dipende dalla possibilità di calcolare la funzione dell'utente per una data X. Quindi sembra che dovrò usare un linguaggio più semplice. Grazie ancora. – user2388026

+0

Non è possibile farlo implementando un sudo try-catch in C, come descritto qui http://stackoverflow.com/questions/10586003/try-catch-statements-in-c? – user3282276

0

Ffmpeg/libav ha un semplice analizzatore di funzione che è possibile utilizzare.

Problemi correlati