IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

[Langage] Comment créer des fonctions qui sont des variables


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut [Langage] Comment créer des fonctions qui sont des variables
    Bonjour

    Je voudrais créer des variables qui sont en fait des fonctions mathématiques.

    Ceci est un code Maple, et c'est exactement ce que je veux faire:
    La variable g[1,2] est une fonction par morceaux qui dépend de x.

    g[1,2]:=unapply(piecewise(x<1,0,x=>1,1),x):

    Si on fait g[1,2](2), on obtient la valeur de cette fonction en 2, c'est a dire 1.

    Comment faire ceci en C++? Je penche pour des pointeurs de fonctions.

    Par exemple, je pourrait créer un prototype d'une telle fonction, qui prend des paramètres abstraits.
    Lors de l'instantiation de fonctions, je précise les paramètres qui vont avec cette fonction. Je pourrais ainsi appeler à n'importe quel moment du code la fonction. Je pourrais aussi la détruire...
    Qu'en pensez vous?

  2. #2
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    des foncteurs iraient effectivement, mais tu dois pour le cas de ton g créer une matrice de foncteurs avec des double en argument.

  3. #3
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    par foncteurs tu veux dire pointeurs vers des fonctions ?

    créer une matrice de foncteurs avec des double en argument.
    La matrice servirait à stocker les fonction g[i,j]_{i,j}??

    As tu un exemple de foncteur?
    merci

  4. #4
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    Voila ce que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    double f(double x,double param){
    	if(x<0){return 0;}
    	if(x>1){return 0;}
    	if(x<0.5){return param;}
    	if(x>=0.5){return 1-param;}
     
    }
     
    double fonction2(double a1,double a2,double a3,double m,double x){
    	if(x<a1){return 0;}
    	if(x>a3){return 0;}
    	if(x<a2){return f(x,m)*m;}
    	if(x>=a2){return f(x,m)*(1-m);}
    }
     
    int main(){
    	double *g=new double[100];
    	fonction2 *tableau=new fonction2[100];
    	double (*p)(double,double,double,double,double);
    	p=&fonction2;
    	cout<<(*p)(2,3,4,2,4);
    return 0;
     
    }
    ensuite j'aimerais créer un tableau dont les case contiennent le pointeur vers la fonction g. (en gros, la fonction g elle-même).
    Je me suis basé sur double *g=new double[100]; pour faire: fonction2 *tableau=new fonction2[100];

    mais bien sur fonction2 n'est pas un type de C++
    Alors faut il créer un typdef, enfin qqch comme ca pour créer un type?

  5. #5
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    dans ton cas, je mettrais pour g:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef double (*Tonpointeur)(double);
    Tonpointeur **g=new Tonpointeur*[largeur]
    for(int i=0; i<largeur;++i)
           g[i]=newTonpointeur[longeur]

  6. #6
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    ahhh j'y étais presque
    j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     typedef double (*t)(double,double,double,double,double);
    ca compile, mais je ne sais pas quoi ca fait.
    que signifie la ligne de code ci dessus par rapport à la tienne?

  7. #7
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    ca créé un type qui est un pointeur sur fonction ce que tu as fait

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef double (*funcPtr)(double);
     
    double fonction1(double toto){ return toto; }
    double fonction2(double toto){ return toto*2; }
     
    //Puis plus loin dans ton code :
     
    funcPtr mafonction = fonction1;
    //funcPtr mafonction = fonction2; peut convenir aussi.
    std::cout << mafonction(3.2) << std::endl; //Cette ligne va appeler fonction1 avec un code tel quel.

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/05/2013, 09h59
  2. Comment créer une fonction d'archivage des entrées
    Par vietzims dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/05/2008, 23h15
  3. Réponses: 2
    Dernier message: 22/10/2007, 17h50
  4. Comment créer une fonction qui retourne un tableau?
    Par Dereck07 dans le forum Delphi
    Réponses: 4
    Dernier message: 26/04/2007, 13h16
  5. Creer des fonctions qui émule des fonctions Access
    Par steelidol dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/05/2006, 18h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo