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 :

Module et sous-programme


Sujet :

Fortran

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 14
    Points
    14
    Par défaut Module et sous-programme
    Bonjour, je débute en Fortran et doit préparer un module contenant une fonction qui fait la somme de 2 nombres, puis un programme qui utilise cette fonction pour afficher la somme de ces 2 nombres saisis par l'utilisateur.

    Voici mon code pour le module :

    MODULE func
    IMPLICIT NONE
    CONTAINS
    FUNCTION f1 (a,b)
    DOUBLE PRECISION :: f1
    DOUBLE PRECISION, INTENT (in) :: a,b
    f1 = a+b
    END FUNCTION f1

    END MODULE func


    Et pour le programme principal :

    PROGRAM prog1
    USE func
    DOUBLE PRECISION :: x,y,z

    PRINT*, "Saisir 1 nombre"
    READ(*,*) y
    PRINT*, "Saisir 1 nombre"
    READ (*,*) z
    CALL f1 (y,z)
    PRINT*, x


    END PROGRAM prog1


    Lorsque je compile il y a une erreur au niveau de la fonction f1.
    Voici le message d'erreur :
    exSeance4.f90:2.16:

    USE func
    1
    exSeance4.f90:9.13:

    CALL f1 (a,b)
    2
    Error: 'f1' at (1) has a type, which is not consistent with the CALL at (2)



    Merci d'avance pour vos réponses

  2. #2
    Membre averti
    Homme Profil pro
    [SciComp]
    Inscrit en
    Août 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : [SciComp]

    Informations forums :
    Inscription : Août 2013
    Messages : 134
    Points : 323
    Points
    323
    Par défaut
    Bonjour,

    Vous définissez f1 comme une function (qui est une entité "sous-programme" typée qui réalise diverse actions et retourne une valeur) et l'appelez comme une subroutine (qui est une entité "sous-programme" non-typée qui réalise des actions mais ne retourne aucune valeur). C'est ce que le compilateur vous reproche.

    Vous auriez pu faire à la mode "function" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     double precision function f1(y,z)
       implicit none
       double precision, intent(in)  :: y, z
       f1=y+z
     end function f1
    [...]
      x=f1(y,z)
      print *, x
    [...]
    ou alors, à la mode "subroutine" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     subroutine s1(y,z,x)
       implicit none
       double precision, intent(in)  :: y, z
       double precision, intent(out) :: x
       x=y+z
     end subroutine s1
    [...]
       call s1(y,z,x)
       print *, x
    [...]
    Vous trouverez des réponses ici.

    Cordialement,
    xflr6

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    J'ai modifier le programme en le faisant en mode fonction mais j'ai le message d'erreur suivant :
    $ gfortran exSeance4.f90
    C:\Users\Martin\Desktop\Fortran\tmp\ccZLaTa3.o:exSeance4.f90.text+0x19d): undefined reference to `__func_MOD_f1'
    collect2: ld returned 1 exit status

    Mon Module contenant la fonction est enregistré en tant que modexSeance4.f90
    Le programme principal est enregistré en tant que exSeance4.f90

    Merci encore !

  4. #4
    Membre averti
    Homme Profil pro
    [SciComp]
    Inscrit en
    Août 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : [SciComp]

    Informations forums :
    Inscription : Août 2013
    Messages : 134
    Points : 323
    Points
    323
    Par défaut
    Bonjour,

    il reste à compiler tout le monde.
    Un exemple avec deux fichiers en compilation séparée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ gfortran -o file1.o -c file1.f90
    $ gfortran -o file2.o -c file2.f90
    $ gfortran -o prog.exe file1.o file2.o
    Cordialement,
    xflr6

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Ok merci , le problème est résolu

Discussions similaires

  1. chargement de modules et sous-programme
    Par Jasmine80 dans le forum Langage
    Réponses: 8
    Dernier message: 28/01/2009, 11h13
  2. Réponses: 31
    Dernier message: 30/08/2005, 13h10
  3. probleme apache+module python sous windows
    Par gaussprodada dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 02/11/2004, 21h09
  4. Réponses: 2
    Dernier message: 04/06/2004, 10h36
  5. [langage] les sous programmes
    Par giverny dans le forum Langage
    Réponses: 6
    Dernier message: 21/07/2003, 19h24

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