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

Fortran Discussion :

Passage de fonction en argument


Sujet :

Fortran

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 123
    Points : 100
    Points
    100
    Par défaut Passage de fonction en argument
    Bonjour,

    une petite question en fortran : est-il possible de passer en argument à une fonction une autre fonction.

    Exemple (débile) :

    - j'aurai une fonction calcule(f,x) qui me calculerai f(x).
    - ainsi je pourrai passer en argument fonction_carre, racine_carre.

    (l'exemple est débile, je conçois, mais ça représente exactement ce que je veux faire)

    Es ce possible ?
    Pour ceux qui veulent bronzer avec autre chose que des tubes cathodiques : quelques idées de balades !

  2. #2
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Va voir dans ta doc ce qu'ils disent de l'instruction External.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 123
    Points : 100
    Points
    100
    Par défaut
    Merci !
    Pour ceux qui veulent bronzer avec autre chose que des tubes cathodiques : quelques idées de balades !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 123
    Points : 100
    Points
    100
    Par défaut
    Alors du coup j'ai programmé un petit exemple :
    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
    function f1(x) result (y)
      y=x
    end function f1
     
    function f2(x) result (y)
      y=x**2.0
    end function f2
     
    function evaluate(fonction) result(y)
      real y
      external fonction
      y=fonction(3.0)
    end function evaluate
     
    program main
      write(*,*) f1(2.0)
      write(*,*) f2(2.0)
      write(*,*) evaluate(f1)
    end program main
    Mais ça ne compile pas. Pourtant j'ai recopié quasiment un exemple fourni.
    Le compilo me renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      write(*,*) evaluate(f1)
                          ^   
    "essai.f90", Line = 18, Column = 23: ERROR: Procedure "F1" must be EXTERNAL, a module procedure or declared in an interface block to be an actual argument.
     
    f90: COMPILE TIME 0.070000 SECONDS
    f90: MAXIMUM FIELD LENGTH 5105334 DECIMAL WORDS
    f90: 18 SOURCE LINES
    f90: 1 ERRORS, 0 WARNINGS, 0 OTHER MESSAGES, 0 ANSI
    Vous auriez une idée ?
    Pour ceux qui veulent bronzer avec autre chose que des tubes cathodiques : quelques idées de balades !

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Citation Envoyé par Loïc B. Voir le message
    ...ça ne compile pas... Vous auriez une idée ?
    J'en ai même 2 :
    • Tu n'utilises pas le keyword « external ». Retourne à la doc.
    • C'est une très très mauvaise habitude de ne pas utiliser de « implicite none »

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 123
    Points : 100
    Points
    100
    Par défaut
    Ah oui autant pour moi, j'ai recopié le mauvais bout de code. Cependant, le message de compilation était le bon : même avec le keyword external, ça ne marche pas.

    Edit : voilà la solution :

    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
    function f1(x)
      implicit none
      real x,f1
      f1=x
    end function f1
     
    function f2(x)
      implicit none
      real x,f2
      f2=x**2
    end function f2
     
    function evaluate(fonction)
      implicit none
      real fonction
      external fonction
      real evaluate
      evaluate = fonction(3.0)
    end function evaluate
     
    program main
      implicit none
      real f1,f2,evaluate,a
      external f1
      external f2
      write(*,*) f1(2.0)  
      write(*,*) f2(2.0)
      write(*,*) evaluate(f1)
      write(*,*) evaluate(f2)
    end program main
    Pour ceux qui veulent bronzer avec autre chose que des tubes cathodiques : quelques idées de balades !

  7. #7
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Loïc B. Voir le message
    une petite question en fortran : est-il possible de passer en argument à une fonction une autre fonction.
    C'est un callback, et c'est possible -- mais c'est un peu complique, notamment si tu veux passer des arguments. Voir ici pour une bonne explication.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. template & passage de fonction en argument
    Par clement.analogue dans le forum Langage
    Réponses: 4
    Dernier message: 23/05/2011, 00h40
  2. Passage de fonction en argument à une autre classe
    Par alalalola dans le forum Langage
    Réponses: 8
    Dernier message: 01/05/2011, 14h42
  3. Passage fonction en argument
    Par scarabeous dans le forum C++
    Réponses: 3
    Dernier message: 11/07/2009, 19h59
  4. Réponses: 2
    Dernier message: 02/09/2008, 11h37
  5. Passage de conteneur en argument de fonction
    Par elnino67 dans le forum SL & STL
    Réponses: 4
    Dernier message: 28/05/2008, 19h13

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