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:
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 8-)) 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:
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 :calim2:.
Cordialement