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 :

comment manipuler des ensembles d'objets présentant des similarités (nom,numéro,valeur)?


Sujet :

Fortran

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut comment manipuler des ensembles d'objets présentant des similarités (nom,numéro,valeur)?
    Bonjour,
    je suis habitué au Java mais je dois me mettre au Fortran et je galère !
    Voici mon problème :
    je dois manipuler des objets (appelons-les des 'components') qui présentent des similarités : un nom, un numéro et une valeur représentative. J'aimerais pouvoir les rassembler dans une liste ou un vecteur afin de pouvoir les manipuler facilement et avoir accès à leur nom, numéro ou valeur.
    En Java, j'aurais d'abord crée une classe (component) avec des attributs (name_compo,num_compo,val_degrad), puis ensuite un vecteur d'objets de type component.
    Mais comment fait-on en fortran??

    J'ai essayé la namelist :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    character*6,DIMENSION(:),allocatable::name_comp(:)                                  !name of component
    integer,DIMENSION(:),allocatable::num_comp(:)                                           !number of the component
    real,DIMENSION(:),allocatable::val_degrad(:)                                            !value of degradation
    NAMELIST /components/ name_compo,num_compo, val_degrad
    mais ca ne marche pas du fait de l'allocation dynamique de mémoire dont j'ai besoin.
    Je pense qu'il faudrait que je crée un module component :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MODULE component
        character*8::name_comp
        integer::num_comp
        real::value_degrad
    END MODULE component
    mais je ne sais pas du tout comment l'utiliser ensuite.

    Merci beaucoup de votre aide

  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
    La solution se trouve dans les « types » :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    type TComponent
      character*6 :: name_comp  ! name of component
      integer     :: num_comp   ! number of the component
      real        :: val_degrad ! value of degradation
    end type
    De là, tu peux créer un variable de type Component et l'allouer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    type (TComponent), allocatable :: CompList(:)
    ...
    allocate(CompList(NbrItem))
    Pour accéder aux membres de CompList, tu dois utiliser l'opérateur %, par exemple CompList(i)%name_comp = ...

    Finalement, il est généralement plus efficace de définir les types dans des modules et d'y insérer également les méthodes (fonctions et routines) associées. Par 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
     
    module ModuleComponent
      implicit none
      type TComponent
        character*6 :: name_comp  ! name of component
        integer     :: num_comp   ! number of the component
        real        :: val_degrad ! value of degradation
      end type
    contains
      subroutine ReadComponent(Self)
        type (TComponent), intent(in out) :: Self
        ...
        end subroutine
    ...
    end module
    Ton programme utilisateur du module aura la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    program Test
      use ModuleComponent
      implicit none
      type (TComponent), allocatable :: CompList(:)
      ...
      allocate(CompList(NbrItem))
      ...
      do k = 1, LongueurList
         call ReadComponent(CompList(k))
      ...

Discussions similaires

  1. Réponses: 18
    Dernier message: 01/04/2013, 17h07
  2. MVVM et Binding d'objets contenant des listes d'objets
    Par Tanous dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 21/07/2010, 14h01
  3. extraire des ensembles d'objets a partir d'un nuage de points
    Par salihovic dans le forum Traitement d'images
    Réponses: 21
    Dernier message: 10/11/2009, 12h07
  4. Réponses: 3
    Dernier message: 27/01/2009, 18h17
  5. Réponses: 1
    Dernier message: 06/04/2007, 17h59

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