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 :

Tableaux déchiquetés / Jagged array


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut Tableaux déchiquetés / Jagged array
    Bonjour,

    Je coince sur un petit problème en fortran !
    Je ne suis pas informaticien mais physicien donc vous allez surement pouvoir m'aider
    J'aurais besoin d'une structure de tableaux déchiquetés (jagged array) en fortran 95.
    C'est à dire un tableau de N lignes où chaque ligne peut avoir un nombre de colonnes différent.

    Est ce possible ? Efficace ?

    Merci pour votre aide

    Bonne journée

  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
    Par défaut
    Ça se fait au moyen d'un vecteur de pointeurs représentant les lignes, et où chaque pointeur contient un vecteur pour les éléments de la ligne, soit les colonnes.

    La difficulté est que Fortran ne permet pas de définir un vecteur de pointeurs ! Il faut donc utiliser une astuce, au moyen d'un type utilisateur (type). Et tu ne retrouveras pas la syntaxe A(i,j) comme il est possible de faire en C par exemple...

    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    type TCol
       real, pointer :: Col(:)
    end type
    type(TCol), allocatable(:) :: Ligne
    ...
    allocate(Ligne(1:N))
    do k=1,N
       allocate(Ligne(k)%Col(1:NbColRequisePourLaLigne(k)))
    enddo
    ...
    a = f(Ligne(i)%Col(j))
    ...
    Ce code est valide (sous réserve de coquilles) en F90 et F95. À compter de F95 + TR allocatables, donc pour les compilateurs récents, tu peux changer la ligne real, pointer :: Col(:) par real, allocatable(:) :: Col pour avoir un code un peu plus robuste (moins de risque de perte de mémoire (memory holes)) et plus efficace (il est plus facile pour un compilateur d'optimiser des allocatables que des pointeurs).

    Tu pourrais aussi pousser un peu plus loin et créer des fonctions et routines pour accéder au tableau et alléger la syntaxe des références :
    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
     
    type TCol
       real, pointer :: Col(:)
    end type
    type(TCol), allocatable(:) :: A
    ...
    allocate(Ligne(1:N))
    do k=1,N
       allocate(A(k)%Col(1:NbColRequisePourLaLigne(k)))
    enddo
    ...
    call Set(A,i,j,expression)
    b = f(Get(A,i,j))
    ...
    contains
      function Get(A,i,j)
        type(TCol), intent(in) :: A(:)
        integer, intent(in) :: i,j
        Get = A(i)%Col(j)
      end function Get
      subroutine Set(A,i,j,V)
        type(TCol), intent(inout) :: A(:)
        integer, intent(in) :: i,j
        real, intent(in) :: V
        A(i)%Col(j) = V
      end subroutine Set

Discussions similaires

  1. [Tableaux] passer un array d'une page à une autre
    Par 18Marie dans le forum Langage
    Réponses: 5
    Dernier message: 25/06/2006, 22h42
  2. [Tableaux] Trier un array
    Par borgfabr dans le forum Langage
    Réponses: 11
    Dernier message: 23/04/2006, 15h13
  3. [Tableaux] Accesseur et Array
    Par Philsmile dans le forum Langage
    Réponses: 5
    Dernier message: 30/03/2006, 12h06
  4. [Tableaux] Envoyer un Array par un form method get
    Par Zen_Fou dans le forum Langage
    Réponses: 4
    Dernier message: 22/03/2006, 19h51
  5. [Tableaux] Gérer une array...
    Par kult dans le forum Langage
    Réponses: 7
    Dernier message: 16/11/2005, 17h03

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