tableau dont la taille est modifié par une procédure
Bonjour,
Après avoir passé un moment sur le forum, je poste ma question... Je vous mets ici un exemple simple "correspondant" à mon problème: je dois créer une procédure qui a pour but de trier les éléments d'un tableau, d'en éliminer certains et d'en conserver d'autres. Par exemple, garder les nombres différents de 2 présents dans un tableau et supprimer les autres. Voilà comment je procède:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| integer :: n
integer, dimension(:), allocatable :: tab, tab0
n=10
allocate(tab(10))
do i=1, n
tab(i)=i
end do
call maroutine(n, tab)
allocate(tab0(n))
tab0=tab(1:n)
deallocate(tab)
... |
où
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| subroutine maroutine(n, tab)
integer, intent(inout) :: n
integer, intent(inout) :: tab
integer :: i, j
j=0
do i=1, n
if(tab(i) .ne. 2) then
j=j+1
tab(j)=tab(i)
end if
end do
n=j
end subroutine |
J'aimerais bien pouvoir me passer d'allouer tab0 et de recopier tab dans tab0. En fait, ce qui serait bien, serait de pouvoir passer tab dans maroutine, et que maroutine modifie elle-même tab en tab0 (notammant qu'elle change la taille de tab).
Est-ce qu'il y a un autre moyen de faire ça? Peut-être avec des pointeurs (je ne suis pas calé sur ce sujet... honte à moi)?
Merci d'avance.