Newsgroup: it.comp.lang.c++
Titolo: string->funzione

Salve a tutti, approfitto del presente msg per salutarvi e
presentarvi, visto che sono nuovo.
Ho il seguente problema: devo far si che introducendo una stringa da
tastiera, questa venga convertita in ... funzione. Ad esempio:
scrivendo y=sin(cos(x)) da prompt, il prg deve poter assegnare ad una
variabile Y il valore del seno del coseno di un'altra variabile X.
Secondo voi e' fattibile? Come?


Quello che vuoi e' sicuramente fattibile, ma non e' semplicissimo; non
esiste un meccanismo automatico che associ la stringa "abc" alla
funzione di libreria abc(). Devi scrivere un programma che scorra
l'espressione, ne riconosca gli elementi ad in base a questi applichi le
operazioni opportune.
Un esempio che puo' costituire un punto di partenza e' l'interprete di
espressioni aritmetiche usato come esempio in "The C++ Programming
Language" 3 ed di B. Stroustrup.
Ciao,
Nicola

 Secondo voi e' fattibile? Come?
Semplicissimo; devi fare il parsing della string decomponendola e
identificando tutte le sottoespressioni matematiche di cui si compone;
richiamare per ognuna di esse la funzione opportuna; ed applicare ai
risultati le operazioni richieste (e.g. per "y=sin(x)+cos(x)" una
somma).
Scherzi a parte, di "pocket calculators" simulati ce n'e' a bizzeffe
in giro; una richiesta a google te ne listera' una barca.  Io avevo
segnalato a suo tempo una implementazione in C + lex/yacc, sotto l'URL
http://wwwcdf.pd.infn.it/MLO/dtc.tar.gz
 .
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
The instructions said to use Windows 98 or better - so I installed FreeBSD.

On Tue, 06 Mar 2001 09:36:21 GMT, 
nos...@hushmail.com
 (Darkstar)
wrote:

L'ho fatto in Pascal e in C quando mi sono diplomato e l'ho 'regalato'
ad un mio compagno per farci la tesina... (io non portavo matematica)
Che tempi...
E che bello lasciare i professori a bocca aperta... ^____^
Luc.

scusate,forse la mia e' una bestemmia. Programmo da
poco in c++.
Anziche' parserizzare l'espressione come e' suggerito
vorrei sapere : 
sarebbe possibile creare una function esterna  e
scrivere una procedura nel programma principale  che
vada a modificare la riga del file esterno (la
function, in questo caso) inserendo la stringa
introdotta nella riga dove va definita la funzione
analitica?
e' lo stesso processo che si faceva usando il basic
(quando era interpretato) o il turbobasic (quando
divento' un linguaggio compilato).
grazie per le delucidazioni che vorrete darmi.
______________________________________________________________________
Do You Yahoo!?
Il tuo indirizzo gratis e per sempre @
yahoo.it
 su 
http://mail.yahoo.it
-- 
Posted from 
web12212.mail.yahoo.com
 [216.136.173.146] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Non ho capito cosa intendi dire.
Di quale file e di quale function esterna stai parlando?
Mauro

[CUT]
Si, lo č. 8)
Luc.

Ma il tuo parser riusciva a risolvere intere espressioni?
Es.
1 + 2 * 3 / 4 + (2 * 2) ^ 3
Ciao
-- 
Posted from 
smtp2.libero.it
 [193.70.192.52] 


1 + 2 * 3 / 4 + (2 * 2) ^ 3
No, quelle erano troppo semplici...
"(sin(x*2^3)/atn(1/(2+x))*2.5+1e3"
era più divertente per testarlo... 8))))
Luc.

"(sin(x*2^3)/atn(1/(2+x))*2.5+1e3"
Spero ti segnalasse l'errore sintattico nelle espressioni come in
questo esempio :)
 
--
Andrea Laforgia (ICQ 87230455)
http://www.geocities.com/AndreaLaforgia
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

questo esempio :)
Penso di si. Prima di 'calcolarne il valore' la funzione veniva
Tokenizzata per ottimizzare la velocità... li venivano fatti anche i
controlli sintattici.
Purtroppo il codice è LOST, se avessi tempo in 2-3 gg la riscriverei,
ma non mi serve più... passo la palla agli altri 8-)
Luc.                        

Potresti spiegarmi che significa tokenizzata?
Grazie
Luigi


Potresti spiegarmi che significa tokenizzata?
Ridotta in parti + piccole (i token).
In realta' questo e' il metodo standard che viene seguito per
estrapolare dalla la funzione i vari "pezzi".
La funzione che "tokenizza", non fa altro che raggruppare dei
caratteri perche' costituiscano un'unica informazione (es.: le cifre
che compongono un numero o le lettere che compongono una variabile).
--
Andrea Laforgia (ICQ 87230455)



Ciao
Domenico Barra