Newsgroup: it.comp.lang.c
Titolo: Puntatore a funzione con piu' parametri

Supponiamo che io abbia una funzione tra i cui argomenti vi e' un
puntatore a funzione, nel caso in questione una routine di integrazione
numerica:
double integrale(double (*func)(double x), double a, double b) {...}
che calcola l'integrale definito tra a e b della funzione in questione.
Supponiamo inoltre che io abbia una funzione a piu' parametri, del tipo
double parabola (double x, int a) {return a*x*x; }
Come faccio a passare questa funzione a integrale() *tenendo fisso il
parametro a*, ossia riducendola per esempio a parabola(x,1)?
Ciao e grazie
-- 
Riccardo Campana
pabel...@gmail.com
"Physics is like sex: sure, it may give some practical
results, but that's not why we do it"  (Richard Feynman)

 parametro a*, ossia riducendola per esempio a parabola(x,1)?
In C questa cosa non si risolve in maniera pulita. Devi utilizzare una 
variabile esterna per memorizzare il parametro della funzione:
double parabola(double x, double a){
	return a*x*x;
}
double a;
double fun(double x) {
	return parabola(x,a);
}
main() {
   a=1;
   integrale(fun,0,1);
}
In C++ potresti invece risolvere il tuo problema in maniera molto più 
pulita...
Stai leggendo Numerical Recipes?
E.

 parametro a*, ossia riducendola per esempio a parabola(x,1)?
dal main chiami:
risultato = integrale(parabola,a,b);
in integrale() scrivi:
temp = func(x,1);
Ciao Jack

 Stai leggendo Numerical Recipes?
Si', la versione C...anche se la routine d'integrazione l'ho fatta io.
Ciao


         for(a = 1; a < 10; i++){
ovviamente e': for(a = 1; a <= 10; a++)
ciao


 Quindi qualcosa come:
Sì. Ma se hai un po' di tempo da dedicarci ti consiglio di imparare il 
C++, è molto adatto a scrivere codice per il calcolo numerico.
E.

 C++, è molto adatto a scrivere codice per il calcolo numerico.
a quel punto gli direi di impararsi il FORTRAN che e' nato apposta per
il calcolo numerico.
Ciao Jack


Io lo sconsiglio vivamente.
E.


Magari un'  argomentazione sarebbe pià  utile per chi legge.
Giorgio

 il calcolo numerico.
A meno che le implementazioni FORTRAN di oggi (che non conosco) non
offrano caratteristiche specifiche per il calcolo numerico, non ci trovo
un grande vantaggio a prediligere questo linguaggio. L'ultima volta che ho
usato il FORTRAN, diversi anni fa, non ho trovato grandi differenze
rispetto ad un qualunque altro linguaggio ad alto livello, con un buon
supporto di base per il calcolo numerico.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 supporto di base per il calcolo numerico.
Dipende da che standard hai sperimentato. l'  attuale è  decisamente 
superiore allo standard 77 e il linguaggio ha "built-in"  diverse 
caratteristiche utili per la programmazione numerica (ad esempio la 
sintassi "vettoriale" come in matlab o le funzioni intrinseche per il 
controllo implementation-independent della precisione).
Giorgio

 superiore allo standard 77 
Lo sospettavo. Io ho usato appunto lo standard 77 (sia l'implementazione
Microsoft che il g77).



Ad esempio non esiste it.comp.lang.fortran in cui chiedere aiuto.
E.

 Ad esempio non esiste it.comp.lang.fortran in cui chiedere aiuto.
Mi sforzo di cogliere l'ironia di questo messaggio. Ovviamente il Fortran
è un linguaggio per applicazioni di nicchia. Non so bene quanta sia la sua
diffusione oggi. Sicuramente è usato in pochissimi ambiti e il supporto
scovabile in giro è minimo. Non è detto, però, che le implementazioni
Fortran non presentino dei vantaggi, rispetto a quelle di altri linguaggi,
per lo sviluppo di quel tipo di applicazioni.


 Ad esempio non esiste it.comp.lang.fortran in cui chiedere aiuto.
Se è  per questo non esiste neanche it.comp.lang. asm, awk, basic, 
eiffel,  lisp, postscript,  ruby, tcl, ... .  Ma che vuol dire? 
Sicuramente è  diventato  un linguaggio di nicchia e la nicchia  non ha 
particolari difficoltà  con l'  inglese e quindi molti italiani postano 
su comp.lang.fortran dove trovano in genere consulenze di altissimo livello.
Comunque, lungi da me dall'  iniziare un flame sui linguaggi. Volevo 
solo sottolineare che spesso le opinioni sul Fortran  risentono di 
pregiudizi basati su  uno stadio ormai sorpassato del linguaggio.  E  la 
differenza tra Fortran 90/95 o 2003  dal  Fortran 77 è  enormemente 
maggiore di quella che c'è  tra C99 e C  pre-ANSI.
Giorgio

 Sicuramente è  diventato  un linguaggio di nicchia
Sì, appunto, perché aggiungere difficoltà a difficoltà quando uno sta 
imparando la programmazione numerica? Poi l'OP aveva difficoltà perché 
il C non è un linguaggio funzionale, e gli consigli di passare al 
Fortran? Ora io effettivamente sono rimasto al Fortran di 10 anni fa. 
Sarei curioso di sapere se oggi in Fortran è possibile risolvere il 
problema dell'OP in modo più pulito che in C. In tal caso chiedo venia...
E.

 Fortran?
E tu gli consigli di passare al C++ che gia' ha problemi col C?
Ciao Jack

 Fortran?
Normalmente con 'linguaggio funzionale' si intende una cosa ben diversa.
Tipicamente un linguaggio come SML, OCaml, Haskell.
-- 
blog:  
http://www.akropolix.net/rik0/blogs
 | Uccidete i filosofi,
site:  
http://www.akropolix.net/rik0/
      | tenetevi riso e
forum: 
http://www.akropolix.net/forum/
     | bacchette per voi.

 Tipicamente un linguaggio come SML, OCaml, Haskell.
Io ho detto che C e Fortran non sono linguaggi funzionali. Penso che non 
ci sia dubbio su questo.
Il C++ può, in maniera limitata, imitare un linguaggio funzionale. In 
particolare il problema postato dall'OP non ha una soluzione sensata in 
C ma HA soluzione in C++. Non so se ha soluzione in Fortran, ma penso di no.
E.

 E tu gli consigli di passare al C++ che gia' ha problemi col C?
Il problema che ha con il C non ha una soluzione sensata. Dunque direi 
che si è trovato di fronte ad una limitazione del linguaggio. Puo' darsi 
benissimo che col C++ si trovi bene, in effetti il C++ è molto 
utilizzato per il calcolo numerico.
E.

 Non so se ha soluzione in Fortran, ma penso di no.
Ho fatto un minimo di programmazione Fortran in ambito MPI. Ma
complessivamente lo listo fra i linguaggi che leggo male, figurati
scriverlo.


 non la userei proprio. 
A dire il vero, io la trovo una caratteristica molto comoda. Il Pascal le
supporta da sempre e, a mio avviso, tornano utili.


 supporta da sempre e, a mio avviso, tornano utili.
Ah, ho capito a cosa si riferisce crxor... in effetti è una cosa che mi 
mancava del Pascal. Ma non capisco come potrebbe essere utilizzata... 
forse così?
typedef double (*unaryFunction)(double x);
typedef double (*binaryFunction)(double x,double y);
unaryFunction bindSecond(binaryFunction fun, double y) {
   double f(x) {
      return fun(x,y);
   };
   return f;
}
dubito che questo codice abbia senso...
E.

 supporta da sempre e, a mio avviso, tornano utili.
Questo č l'altro motivo per cui mi sto avvicinando a Pascal.
Io sono abituatissimo ad usare le closures e mi fa comodo averle :)
BTW, il problema dell'OP sarebbe probabilmente ben risolvibile in Pascal
o č una cosa a naso mia e sono fuori strada?
