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 :

Surcharge de fonctions + envoi de paramètres par tableau


Sujet :

Fortran

  1. #1
    Membre habitué
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Points : 176
    Points
    176
    Par défaut Surcharge de fonctions + envoi de paramètres par tableau
    Bonjour.

    J'avais 2 petites questions en Fortran :
    1) Est-il possible de surcharger des fonctions à la manière du C++ et si oui comment faire ?

    2) Imaginons que j'ai une fonction coordminmax(xyz_min,xyz_max)xyz_min et xyz_max sont des real(KIND=8),dimension(1:3) (c'est à dire des tableaux à 1 colonne et 3 lignes dont les indices vont de 1 à 3). Imaginons encore que dans mon unité appelante j'ai xmin, xmax, ymin, ymax, zmin, zmax, c'est à dire mes 6 coordonnées qui devraient normalement être dans des tableaux, du moins pour le passage à la fonction. Ma question est la suivante : existe-t-il une possibilité pour passer mes 6 variables à la fonction sans créer 2 tableaux dans l'unité appelante ?

    Merci beacoup

  2. #2
    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
    Je ne me souviens plus très bien de ce qu'est un function overload en C++, alors la réponse ne sera peut-être pas adéquate...

    Tu dois utiliser un module et une interface associant plusieurs procédures du module à un nom public. Pour prendre ton exemple coordminmax, tu dois faire :
    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
     
    module Exemple
      interface coordminmax
        module procedure coordminmax2V
        module procedure coordminmax6S
      end interface
     
    contains
      function coordminmax2V(Pt1,Pt2)
        real(8), intent(in) :: Pt1(3),pt2(3)
        ...
        end function
     
      function coordminmax6S(X1,Y1,Z1,X2,Y2,Z2) result (R)
        real(8), intent(in) :: X1,Y1,Z1,X2,Y2,Z2
        type ??? :: R
        R = coordminmax2V([X1,Y1,Z1],[X2,Y2,Z2])
        end function
    end module
    program
      use Exemple
     
      R1 = coordminmax(PtX,PtY)
      R2 = coordminmax(a,b,c,d,e,f)
    ...
    Question 2 : voir dans l'exemple précédent. Si ton compilateur supporte uniquement du F95 ou moins, la syntaxe [éléments] peut ne pas fonctionner. Tu dois alors utiliser la syntaxe (/éléments/).

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/01/2013, 14h08
  2. [C#] Paramètre par défaut dans une fonction
    Par RobinJulie dans le forum Windows Forms
    Réponses: 5
    Dernier message: 18/01/2012, 14h07
  3. envois des paramètres par ResponseRedirect
    Par sophiesophie dans le forum ASP.NET
    Réponses: 2
    Dernier message: 23/05/2008, 09h24
  4. surcharge de fonction avec comme paramètre Object
    Par poporiding dans le forum C++
    Réponses: 8
    Dernier message: 14/07/2006, 03h47
  5. [C#] Envoie des paramètres par référence
    Par efficks dans le forum C#
    Réponses: 4
    Dernier message: 29/11/2005, 23h53

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