|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2004
Messaggi: 87
|
[C++] Funzioni Matematiche
Salve Ragazzi,
avrei l'esigenza di predisporre una box dove l'utente possa inserire una sua equazione del tipo: Codice:
e^x + (4/25)*sqrt(5*x) Avete idee di come implementare un semplice parser che riconosca le funzioni immesse dall'utente (notasi che non posso conoscere a priori l'ordine degli operatori)? Non ho esigenza di "parsare" integrali, derivate o roba del genere.. al più esponenziali, radici (meglio se si potesse specificare anche l'indice della radice), pi-greco (o costanti di vario genere) ecc... Non ho problemi ad utilizzare librerie esterne, non devo necessariamente scrivere io il codice, avevo dunque pensato a QtScript (magari creando un engine) o le RegExp (magari anche QRegExp). Avete suggerimenti? Aggiornamento: forse potrebbe anche andare questo: http://muparser.sourceforge.net Ultima modifica di El_SiF : 17-04-2010 alle 15:25. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2006
Città: Perugia - San Benedetto del Tronto
Messaggi: 348
|
Potresti trasformare la funzione immessa dall'utente dalla notazione infissa alla notazione postfissa (conosciuta come RPN). Così facendo risolvi il problema di non dover tener conto dell'ordine degli operandi. Dopodiché basta iterare il valore di x e sostituirlo all'interno dello Stack risultante contenente la notazione polacca inversa e risolvi tranquillamente l'espressione.
Link: http://en.wikipedia.org/wiki/Reverse_Polish_Notation http://en.wikipedia.org/wiki/Shunting-yard_algorithm Questa è la soluzione che ho utilizzato io in un programma che ho scritto in Java che doveva lavorare con delle funzioni immesse dall'utente (e anche disegnarle ... ma questa è un'altra storia Per il discorso Parser cerca di controllare, sicuramente in C++ esisterà qualche libreria a riguardo. La parte più complessa però è quella di gestire la funzione data in input. Se non ti è chiaro qualcosa chiedi pure ps vedo che è comunque un problema che capita di affrontare a molte persone ... magari prima o poi proverò a scrivere una piccola guida a riguardo. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:43.


















