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 :

Fonction retournant un tableau


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Par défaut Fonction retournant un tableau
    Bonjour, j'aimerais effectuer une fonction retournant un tableau,

    Mais j'ai toujours le même problème quelque soit la méthode utilisé ( tableau non alloué ou pas) :
    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
     
    program taille_implicite
     
      implicit none
      integer, parameter   :: n = 5, m = 6
      INTEGER :: i
      real, dimension(n) :: tab,somme,som
     
     
     
       DO i = 1,n
          tab(i) = 2;
       END DO
     
     
     
      somme = som( tab, n )
     
      print *,somme
     
    end program taille_implicite
     
    function som( t, lda )
      implicit none
      real, dimension(lda) :: t,som
      integer                :: lda
      integer                :: i
     
     
         do i=1,lda
            som(i) = t(i)
          end do
     
    end function som
    et voici l'erreur récurrente lors de l'appel de fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      somme = som( tab, n )
                   1
    Error: Array index at (1) must be of INTEGER type
    Pour n est bien , un entier je ne comprends pas cette erreur
    Merci à vous

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Il faut que tu definisses un bloc d'interface, pour que som soit bien consideree comme une fonction, et non comme un tableau (malheureusement, le Fortran utilise la meme syntaxe pour la liste d'argument d'une fonction et pour l'acces a un element d'un tableau).
    Ca donne:
    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
     
    program taille_implicite
     
      implicit none
     
      integer, parameter :: n = 5
      integer i
      real, dimension(n) :: tab, somme
     
      interface
        function som(t, lda)
          integer lda
          real, dimension(lda) :: t, som
        end function som
      end interface
     
      do i = 1, n
        tab(i) = 2
      end do
     
      somme = som(tab, n)
     
      print *, tab
      print *, somme
     
    end program taille_implicite
     
    function som(t, lda)
     
      implicit none
     
      integer lda
      real, dimension(lda) :: t, som
     
      integer i
     
      do i = 1, lda
        som(i) = t(i)
      end do
     
    end function som
    Note que tu peux remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      do i = 1, lda
        som(i) = t(i)
      end do
    par

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Par défaut
    Bonjour,

    Merci bien c'est parfait, par contre j'ai une autre petite question comment rendre la fonction external pour pouvoir la passer en argument d'une autre fonction plus tard

    Si je rajoute le external a coté de la declaration du tableau som, il me dis que EXTERNAL et DIMENSION sont en conflit. Il y a surement une astuce aussi.

    Merci

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par bonjour69 Voir le message
    Merci bien c'est parfait, par contre j'ai une autre petite question comment rendre la fonction external pour pouvoir la passer en argument d'une autre fonction plus tard
    external est remplace par l'interface de la fonction. Tu n'as plus besoin de la qualifier d'external.

  5. #5
    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 : 84
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut !

    Si tu veux que ton sous-programme te renvoie un tableau, pourquoi fais-tu une fonction et pas une subroutine?

    Jean-Marc Blanc

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Par défaut
    Bonjour,

    Je fais une fonction car je pensais qu'une subroutine on ne pouvait récuperer les modifications apportés pendant le traitement.

    Peut-etre avec INTENT(in/out) cela est possible non ?

Discussions similaires

  1. Réponses: 24
    Dernier message: 24/05/2006, 19h19
  2. Fonction retournant un tableau initialisé
    Par ero-sennin dans le forum Delphi
    Réponses: 6
    Dernier message: 13/05/2006, 16h05
  3. [TP] Fonction retournant un tableau
    Par molesqualeux dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 07/05/2006, 01h01
  4. PB avec fonction retournant un tableau
    Par T-B dans le forum Langage
    Réponses: 2
    Dernier message: 27/01/2006, 22h01
  5. fonction retournant un tableau
    Par Jero13 dans le forum C
    Réponses: 7
    Dernier message: 22/11/2005, 11h14

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