C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Restriction d'une fonction à plusieurs paramètres

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Boris Sargos
Guest





PostPosted: Fri Apr 23, 2004 12:26 pm    Post subject: Restriction d'une fonction à plusieurs paramètres Reply with quote



Salut à tous,

supposons que j'aie les prototypes suivants (exemples simples et peu
intéressants en eux-mêmes) :

-) une fonction Primitive qui me calcule la primitive d'une fonction f
passée en argument en un point t donné :

double Primitive ( double(*f)(double), t);

-) une fonction Indicatrice qui détermine si un nombre est compris dans
un certain intervalle [i, i+1] :

double Indicatrice ( int, double );


Mon objectif est de pouvoir écrire une fonction du type :

double (*Indicatrice_i)(double) = Indicatrice(i); //
restriction à l'intervalle i de la fonction Indicatrice

pour entre autres utiliser une boucle propre du genre :

for(int i ...;Wink {
// Calcul de la primitive en t
double It = Primitive ( Indicatrice_i , t );
}

Quelqu'un a-t-il une idée ?

Merci.
Boris.


Back to top
Horst Kraemer
Guest





PostPosted: Fri Apr 23, 2004 2:23 pm    Post subject: Re: Restriction d'une fonction à plusieurs paramètres Reply with quote



On Fri, 23 Apr 2004 14:26:52 +0200, "Boris Sargos"
<bsargos (AT) wanadoo (DOT) fr> wrote:

Quote:
Salut à tous,

supposons que j'aie les prototypes suivants (exemples simples et peu
intéressants en eux-mêmes) :

-) une fonction Primitive qui me calcule la primitive d'une fonction f
passée en argument en un point t donné :

double Primitive ( double(*f)(double), t);

double Primitive ( double(*f)(double), double);

"la primitive d'une fonction en un point donné" n'existe pas, mais bon
;-)


Quote:
-) une fonction Indicatrice qui détermine si un nombre est compris dans
un certain intervalle [i, i+1] :

double Indicatrice ( int, double );

Je suppose que Indicatrice retourne 0 ou 1...


Quote:
Mon objectif est de pouvoir écrire une fonction du type :

double (*Indicatrice_i)(double) = Indicatrice(i); //
restriction à l'intervalle i de la fonction Indicatrice

pour entre autres utiliser une boucle propre du genre :

for(int i ...;Wink {
// Calcul de la primitive en t
double It = Primitive ( Indicatrice_i , t );
}

Quelqu'un a-t-il une idée ?

static int ii;
double Indicatrice0(double t)
{
return Indicatrice(ii,t);
}

for (i=0;i<42;i++) {
ii=i;
Primitive (Indicatrice0, 42);
}

ou bien

double (*setindicatrice(int i))(double)
{
ii = i;
return Indicatrice0;
}

for (i=0;i<42;i++)
Primitive (setindicatrice(i), 42);


--
Horst



Back to top
Boris Sargos
Guest





PostPosted: Fri Apr 23, 2004 2:38 pm    Post subject: Re: Restriction d'une fonction à plusieurs paramètres Reply with quote



Merci Horst,

la deuxième solution que tu proposes se rapproche plus de ce que je
recherche. Au fait,
"la primitive d'une fonction en un point donné" existe bel et bien. J'aurais
dû être plus clair : "évaluer en un point donné la primitive F de la
fonction f" Smile
Merci.
Boris.


Back to top
Horst Kraemer
Guest





PostPosted: Fri Apr 23, 2004 2:47 pm    Post subject: Re: Restriction d'une fonction à plusieurs paramètres Reply with quote

On Fri, 23 Apr 2004 16:38:41 +0200, "Boris Sargos"
<bsargos (AT) wanadoo (DOT) fr> wrote:

Quote:
Merci Horst,

la deuxième solution que tu proposes se rapproche plus de ce que je
recherche. Au fait,
"la primitive d'une fonction en un point donné" existe bel et bien. J'aurais
dû être plus clair : "évaluer en un point donné la primitive F de la
fonction f" Smile

Mais de quelle primitive parles-tu? Si F est une primitive de F, alors
F + 42 est aussi une primitive... Quelle est ta définition de
"primitive" ?

--
Horst


Back to top
Boris Sargos
Guest





PostPosted: Fri Apr 23, 2004 3:27 pm    Post subject: Re: Restriction d'une fonction à plusieurs paramètres Reply with quote

J'ai la même définition que tout le monde. Mais tu as raison : j'aurais dû
dire "une" primitive. Pour l'unicité, le tout est de choisir une origine.
Pour mon exemple, je pensais que ce n'était qu'un détail...

Boris


Back to top
Djelal Raouf
Guest





PostPosted: Fri Apr 23, 2004 5:46 pm    Post subject: Re: Restriction d'une fonction à plusieursparamètres Reply with quote

23 Apr 2004 14:26:52 +0200, Boris Sargos <bsargos (AT) wanadoo (DOT) fr> a écrit :
Quote:
Salut à tous,

supposons que j'aie les prototypes suivants (exemples simples et peu
intéressants en eux-mêmes) :

-) une fonction Primitive qui me calcule la primitive d'une fonction f
passée en argument en un point t donné :

double Primitive ( double(*f)(double), t);

-) une fonction Indicatrice qui détermine si un nombre est compris dans
un certain intervalle [i, i+1] :

double Indicatrice ( int, double );


Mon objectif est de pouvoir écrire une fonction du type :

double (*Indicatrice_i)(double) = Indicatrice(i); //
restriction à l'intervalle i de la fonction Indicatrice

pour entre autres utiliser une boucle propre du genre :

for(int i ...;Wink {
// Calcul de la primitive en t
double It = Primitive ( Indicatrice_i , t );
}


Bonjour,
outre la solution de H.K., une autre assez différente est disponible.
Elle repose sur les "closures" (désolé pour l'anglicisme, mais je ne
connais pas le terme français, fermeture ? Clôture ?). Elle fait
intervenir la surcharge de l'opérateur ().

class Indicatrice {
public:
Indicatrice( int i ) : val(i) {}
inline double operator() (double x) {
if (x >= i && x <= i+1) {
return x;
} else {
return 0;
}
}
int val;
};

Indicatrice ind(5);
double t1 = ind(3.5); // t1 vaut 0
double t2 ind(5.5); // t2 vaut 5.5

L'intérêt est, en autre, de ne pas subir l'overhead des pointeurs
de fonctions.

Évidemment le prototype de Primitive doit être ajusté en conséquence.

Enfin, si tu veux jouer avec les closures, je te conseille plutôt de
regarder du côté de Boost::Lambda.

--
Djelal Raouf
djelal point raouf at ensta point org


Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Apr 26, 2004 6:57 am    Post subject: Re: Restriction d'une fonction à plusieurs paramètres Reply with quote

Djelal Raouf <shahinshah (AT) invalid (DOT) fr> wrote

Quote:
23 Apr 2004 14:26:52 +0200, Boris Sargos <bsargos (AT) wanadoo (DOT) fr> a écrit :

supposons que j'aie les prototypes suivants (exemples simples et peu
intéressants en eux-mêmes) :

-) une fonction Primitive qui me calcule la primitive d'une fonction f
passée en argument en un point t donné :

double Primitive ( double(*f)(double), t);

-) une fonction Indicatrice qui détermine si un nombre est
compris dans un certain intervalle [i, i+1] :

double Indicatrice ( int, double );

Mon objectif est de pouvoir écrire une fonction du type :

double (*Indicatrice_i)(double) = Indicatrice(i); //
restriction à l'intervalle i de la fonction Indicatrice

pour entre autres utiliser une boucle propre du genre :

for(int i ...;Wink {
// Calcul de la primitive en t
double It = Primitive ( Indicatrice_i , t );
}

outre la solution de H.K., une autre assez différente est disponible.
Elle repose sur les "closures" (désolé pour l'anglicisme, mais je ne
connais pas le terme français, fermeture ? Clôture ?). Elle fait
intervenir la surcharge de l'opérateur ().

class Indicatrice {
public:
Indicatrice( int i ) : val(i) {}
inline double operator() (double x) {
if (x >= i && x <= i+1) {
return x;
} else {
return 0;
}
}
int val;
};

Indicatrice ind(5);
double t1 = ind(3.5); // t1 vaut 0
double t2 ind(5.5); // t2 vaut 5.5

L'intérêt est, en autre, de ne pas subir l'overhead des pointeurs de
fonctions.

L"intérêt surtout, c'est de permettre plusieurs utilisations à la fois.
Imagine ce qui se passera dans la solution de H.K. si dans la boucle il
y avait une fonction qui elle aussi se servait d'Indicatrice. Sans
parler des histoires de threads. En général, les variables à durée de
vie statique sont à éviter, sauf quand la conception veut qu'il n'y en a
qu'une seule instance, toujours disponible (interface au fichier de
config, par exemple, ou quelque chose de ce genre).

Question vitesse, ça dépend de l'implémentation. C'est vrai que sur la
plupart (toutes) des implémentations aujourd'hui, l'objet fonctionnel
serait plus vite, mais c'est en prime. AMHA, ce sont les autres
avantages qui l'impose, et même si le rapport des performances était
l'inverse, il faudrait le préférer tant que le profiler ne dit pas
autrement.

Quote:
Évidemment le prototype de Primitive doit être ajusté en conséquence.

Enfin, si tu veux jouer avec les closures, je te conseille plutôt de
regarder du côté de Boost::Lambda.

En attendant quelque chose au niveau du langage. (En fait, si tu veux
jouer avec les clotures, je te conseille un autre langage:-).)

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.