[Tech] domandina di c/c++

Szymon Stefanek pragma@firenze.linux.it
Gio 6 Apr 2006 22:46:33 CEST


On Thursday 06 April 2006 20:23, Marco Calviani wrote:
> Salve ragazzi,
>   volevo domandarvi una cosa riguardo a c/c++ (credo banale ma che non
> riesco a risolvere). Ho una funzione matematica scritta all'interno di
> un file testo (es. all'interno di funzione.txt ho pow(x,3)). Vorrei
> far leggere questa funzione all'interno di un programma che mi calcola
> l'integrale della funzione stessa (fino a qui ok); nel main del
> programma vengolo chiamate due funzioni, func() ed integrazione(). Non
> riesco a far si' che func utilizzi la funzione che legge dal
> file.......

Stai cercando di fare un parser di un linguaggio. In generale è una roba 
discretamente complicata: di base sono _almeno_ centinaia di righe di codice.
Forse ti conviene usare uno strumento diverso.. tipo matlab.

Mi è venuta in mente una soluzione bizzarra:

Se la funzione è scritta con la sintassi C e in più imponi delle regole
sulla variabile da utilizzare allora con opportuni accorgimenti
potresti compilare il file funzione.txt come un programma che
ti restituisce il valore della funzione dato un parametro.
Poi chiameresti il programma passandogli la sequenza di parametri
nell'intervallo di integrazione per ottenere un "campionamento" della curva (e 
quindi una sua approssimazione). A quel punto calcoli l'area con un qualche 
metodo. Questo ti permetterebbe di usare dentro funzione.txt una qualunque 
formula esprimibile tramite le funzioni matematiche fornite sul sistema... 
comprese robe complicate come (sin(x) * sin(x)) + pow(x,3) - cos(x + 2);

Il metodo costa comunque un bel po di righe (siamo sempre almeno su diverse 
centinaia).

Le altre soluzioni che mi vengono in mente ti impongono comunque di parsare
la stringa "function". Il problema, poi, è riconoscere di che funzione si 
tratta e di trovare la sua implementazione da chiamare.
O le enumeri tutte (tutte quelle ammissibili) in una tabella oppure (se sei 
fico) giochi con dlsym() per trovare il puntatore a funzione dentro 
libm.so .... ma non credo che sia questo quello che vuoi fare...


-- 

Szymon Stefanek

------------------------------------------------------------------------------
-
- The pragmatic rules for good programming (work in progress)
- 
- 1. Indent, and indent with tabs
- 2. Memory is cheap, life time is precious
- 3. The user is not stupid. But he wants things to "do themselves"
-
------------------------------------------------------------------------------



Maggiori informazioni sulla lista flug-tech