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