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 :

Tableau en parametre sans information de profil


Sujet :

Fortran

  1. #1
    Membre à l'essai
    Homme Profil pro
    etudiant
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 12
    Points
    12
    Par défaut Tableau en parametre sans information de profil
    Bonsoir à vous, lecteur.

    En pleine phase de programmation intense (rédaction d'un compte rendu de tp), une idée, pour me différencier du lot (constitué de mes camarades), m'est apparu.
    Faire un affichage des données un chouia plus beau que celui vu en cours (cad : write(*,*)blablabla).
    Sans prétention quelconque part rapport au code en lui même, voici ce que j'ai fais :
    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
    Subroutine Afficher(Mat)
            implicit none
            integer::i
            character(len=16)::test
            character(len=3)::taille
            real(kind=8),dimension(:),intent(in)::Mat
            write(test,'(1i1)')int(size(mat))
            write(taille,*)'('//test(1:1)
            test=taille//'f6.1)'
            write(*,(test))Mat
        end subroutine
     
        Subroutine AfficherMat(Mat)
            implicit none
            integer::i
            character(len=16)::test
            character(len=3)::taille
            real(kind=8),dimension(:,:),intent(in)::Mat
            write(test,'(1i1)')int(size(mat)/sqrt(real(size(Mat))))
            write(taille,*)'('//test(1:1)
            test=taille//'f6.1)'
            write(*,(test))Mat
        end subroutine
    A vu de nez, pas de différence, voir même 2 fois la même subroutine. Ce n'est pas le cas, remarquez le titre qui change (et oui ) et la 5 ligne des 2 sub. Seul la définition du tableau passé en argument change. Si la encore, créer 2 sub différentes ne posent pas de problème, j'aurai voulu savoir s'il était possible de faire un truc du genre :

    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
     
    Subroutine Affichage(Mat)
         implicit none
            integer::i
            character(len=16)::test
            character(len=3)::taille
     
    !Si matrice alors
            real(kind=8),dimension(:,:),intent(in)::Mat
    !Si vecteur alors
            real(kind=8),dimension(:),intent(in)::Mat
     
     
            write(test,'(1i1)')int(size(mat)/sqrt(real(size(Mat))))
            write(taille,*)'('//test(1:1)
            test=taille//'f6.1)'
            write(*,(test))Mat
     
    end subroutine
    En espérant que le problème eut été bien posé et bien compris, j'ose espérer qu'il y est une solution .

    Cordialement

  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
    Ça se fait via des interfaces (et des modules je crois):
    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
    42
    43
    44
    45
    46
     
    module ModuleAfficher
       implicit none
     
       interface Afficher
           module procedure Afficher1D
           module procedure Afficher2D
       end interface
     
    contains
     
    Subroutine Afficher1D(Mat)
    !        implicit none
            integer::i
            character(len=16)::test
            character(len=3)::taille
            real(kind=8),dimension(:),intent(in)::Mat
            write(test,'(1i1)')int(size(mat))
            write(taille,*)'('//test(1:1)
            test=taille//'f6.1)'
            write(*,(test))Mat
        end subroutine
     
        Subroutine Afficher2D(Mat)
     !       implicit none
            integer::i
            character(len=16)::test
            character(len=3)::taille
            real(kind=8),dimension(:,:),intent(in)::Mat
            write(test,'(1i1)')int(size(mat)/sqrt(real(size(Mat))))
            write(taille,*)'('//test(1:1)
            test=taille//'f6.1)'
            write(*,(test))Mat
        end subroutine
     
    end module
     
    program Test
     
       use ModuleAfficher
       implicit none
     
       real (8) :: Vect(10), Mat(10,10)
     
       call Afficher(Vect)
       call Afficher(Mat)
    Le compilateur choisira la routine correspondant aux types des arguments.

  3. #3
    Membre à l'essai
    Homme Profil pro
    etudiant
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Merci merci, en effet ça marche

    Voici donc la version :
    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
    module ModuleAfficher
       implicit none
     
       interface Afficher
           module procedure Afficher1D
           module procedure Afficher2D
       end interface
     
    contains
    !Affiche un vecteur ligne
    	Subroutine Afficher1D(Mat)
    		character(len=4)::test
    		character(len=8)::taille
    		character(len=16)::tata
    		real(kind=8),dimension(:),intent(in)::Mat
    		write(test,'(1i2)')int(size(mat))
    		write(taille,*)'('//test
    		tata=taille//'f6.1)'
    		write(*,(tata))Mat
     
            end subroutine
     
    !Affiche une matrice 2D
        Subroutine Afficher2D(Mat)
    		character(len=4)::test
    		character(len=8)::taille='0'
    		character(len=16)::tata
    		integer,dimension(2)::j
    		integer::i
    		real(kind=8),dimension(:,:),intent(in)::Mat
    		j=shape(Mat)
    		write(test,'(1i2)')j(1)
    		write(taille,*)test
    		tata=taille//'f6.1)'
    		write(*,'('//tata)Mat
        end subroutine
     
    end module
    L’intérêt du module ci dessus n'est que personnel. Voici la sub pour afficher une matrice n*m en 2D :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
         Subroutine Afficher2D(Mat)
    		character(len=4)::test
    		character(len=8)::taille='0'
    		character(len=16)::tata
    		integer,dimension(2)::j
    		integer::i
    		real(kind=8),dimension(:,:),intent(in)::Mat
    		j=shape(Mat)
    		write(test,'(1i2)')j(1)
    		write(taille,*)test
    		tata=taille//'f6.1)'
    		write(*,'('//tata)Mat
        end subroutine
    Merci pour l'aide
    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. passage d'un tableau en parametre d'une fonction
    Par ataya dans le forum C++Builder
    Réponses: 10
    Dernier message: 26/10/2005, 13h30
  2. Passer un tableau en parametre dans une fonction js
    Par hellmaster78 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/06/2005, 14h35
  3. Tableau en parametre
    Par Freakazoid dans le forum Débuter
    Réponses: 3
    Dernier message: 10/08/2004, 16h46
  4. Tableau en paramètre - Shell et Awk
    Par gc243 dans le forum Linux
    Réponses: 7
    Dernier message: 10/12/2003, 13h32
  5. transmision de tableau en parametre
    Par Horus dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/05/2002, 11h15

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