PDA

View Full Version : [C] valutatore di espressioni


fastmagister
04-12-2007, 10:01
Ciao a tutti ragazzi.

Ci sarebbe qualcuno che mi illustrerebbe come realizzare una funzione C che, presi in input una stringa rappresentante una funzione matematica ed un valore numerico, restituisca il valore della funzione matematica per quel valore numerico?

Per farmi capire...

Se la funzione avrà forma:

double Calcola(char *stringa, double x)
{
.......
.......
}

allora la chiamata:
Calcola("3*x + x^2", 2);
dovrà restituire il valore 10.


L'esempio che ho fatto è semplice, ma il valutatore di espressioni che mi occorre dovrebbe funzionare con le 4 operazioni di base (+, -, *, /) e almeno le seguenti altre: sin, cos, log, sqrt, e ^. Ho però il vantaggio che so a priori che sarà chiamato sempre su funzioni con una singola incognita di nome x.

Qualcosa ho trovato in rete ma non riesco ad adattare niente di quello che ho trovato alle mie esigenze, ovvero realizzare la singola funzione con i due parametri char * e double.

Help me, please! :help:

wingman87
04-12-2007, 11:31
Personalmente sostituirei la x con il valore passato e poi racchiuderei tra parentesi le varie operazioni secondo l'ordine in cui andrebbero eseguite, quindi se ho 2+3*4 diventa (2+(3*4)) e poi svolgerei tutte le parentesi, a partire dalle + interne naturalmente, sostituendole con il valore risultante, quindi la precedente operazione diventa 2+3*4 -> (2+(3*4)) -> (2+12) -> 14

E' una soluzione molto casereccia, probabilmente si può fare di meglio...

fastmagister
04-12-2007, 11:55
Si l'avevo pensato anch'io, ma avrei bisogno di qualcosa che non mi obbligasse ad inserire l'input con tutte quelle parentesi....

wingman87
04-12-2007, 12:02
Io non intendevo inserire l'input con le parentesi, le devi mettere tu.

fastmagister
06-12-2007, 18:46
Risolto con libmatheval

http://www.gnu.org/software/libmath...ml#Introduction

Grazie lo stesso

wingman87
06-12-2007, 19:21
Ti ha accorciato il link e non funziona.. Comunque sono contento che hai risolto.