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 Delphi Discussion :

Comment passer une fonction en argument


Sujet :

Langage Delphi

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Comment passer une fonction en argument
    Suis débutant, donc ne râlez pas...
    J'aimerais créer une fonction qui s'appelle root(f(x,y,...),x) et qui va me chercher la valeur de x qui résout f(x)=0.
    Mon problème: je veux donc passer une fonction (f(x)), en argument. Dans le code appelant j'aurais par exemple f(x)=sin(x), ou f(x)=x^2, ou f(x)=x^2+y^2 ou je ne sais quoi...
    Comment gérer ce truc-là ?

    Merci !

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    Il faut que tu fasses un interpréteur, c'est à dire une routine qui va décortiquer la fonction et l'utiliser. Il me semble qu'il existe un compo comme ça dans la JVCL
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 76
    Points : 67
    Points
    67
    Par défaut
    je n'ai pas delphi sous les yeux mais il n'existe pas un type genre TProc (je suis pas sur pour le nom) qui permette ceci ?

  4. #4
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    +1 Pedro (décidément )

    A la fac, je suis tombé sur le même cas que toi...

    et du coup j'au dév. un interpréteur pour pouvoir écrire sa fonction (avec constantes PI, fonctions trigo, x var. etc...) exactement comme si on l'écrivait sur papier (interprete correctement 'sinxcosx' par exemple).

    Il doit y avoir des compos qui font ca, sinon si tu trouves pas je peux éventuellement te packager tout ca... (écrit à l'origine en TP7! mais je l'utilise toujours aujourd'hui pour le boulot et dans tout mes progs...) -> MP
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  5. #5
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Ce qui nous serais utile pour t'aider c'est de savoir sous quelle forme se présente ta fonction.

    Est ce que c'eest une chaîne de caractères rentrée par l'utilisateur ?
    Auquel cas il te faut un composant d'évaluation d'expressions mathématiques.

    Tu en trouveras sur le site d'efg computer lab, ici :
    http://www.efg2.com/Lab/Library/Delp...ns/Parsers.htm

    Ou bien ta fonction est une functionDelphi, auquel cas :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    //Définition du type fonction
    type 
     TFonction=function(x:real):real;
    ...
    //définition des fonctions
    function f1(x:real):real;
    begin
      result:=sin(x);
    end;
     
    function f2(x:real):real;
    begin
      result:=x*x-2;
    end;
     
    function root(f:TFonction;BorneInf,BorneSup,Delta:real):real;
    const maxit=30;
    var dx,y,yl,swap,xl,rts: real;
        j: integer;
        trouve:boolean;
    begin
       trouve:=false;
       yl := f(BorneInf);
       y := f(BorneSup);
       if (abs(yl)<abs(y)) then
       begin
          rts:=BorneInf;
          xl:=BorneSup;
          swap:=yl;
          yl:=y;
          y:=swap
       end
       else
       begin
          xl :=BorneInf;
          rts:=BorneSup;
       end;
       j:=1;
       while ((j<=maxit) and (not trouve)) do
       begin
          dx:=(xl-rts)*y/(y-yl);
          xl:=rts;
          yl:=y;
          rts:=rts+dx;
          y:=f(rts);
          trouve:=((abs(dx)<Delta) OR (y=0.0));
          inc(j);
       end;
       if not trouve
       then ShowMessage('Nombre maximum d''iterations atteint : racine non trouvée');
       result:=rts;
    end;
     
    //utilisation
    procedure TForm1.Button1Click(Sender: TObject);
    var y0:real;
    begin
      y0:=root(f1,-1,1,1e-3);
      ShowMessage(FloatToStr(y0));
     
      y0:=root(f2,1,2,1e-3);
      ShowMessage(FloatToStr(y0));
    end;
    ...
    Bidouilleuse Delphi

Discussions similaires

  1. [JavaScript] [FAQ] Appeler dynamiquement une fonction et passer une fonction en argument
    Par SpaceFrog dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/05/2008, 14h48
  2. Comment passer une structure en argument?
    Par brunobzh dans le forum C
    Réponses: 2
    Dernier message: 04/05/2008, 10h35
  3. Réponses: 11
    Dernier message: 04/10/2007, 17h18
  4. passer une fonction en argument, c'est possible ?
    Par kamouminator dans le forum C
    Réponses: 4
    Dernier message: 10/11/2006, 21h13
  5. Passer une fonction comme argument à une fonction
    Par Cocotier974 dans le forum Général Python
    Réponses: 4
    Dernier message: 29/06/2004, 13h41

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