next up previous contents
Next: Les tableaux automatiques Up: Tableaux transmis en argument Previous: Transmission explicite des étendues   Contents

Tableau de profil implicite

On souhaite écrire une procédure générique, on suppose que le profil de notre tableau n'est pas connu par avance.
 
       SUBROUTINE implicite (t)
          IMPLICIT NONE
          REAL, DIMENSION (:,:), INTENT(INOUT) :: t
          INTEGER :: i
          DO i = 1, SIZE(t,1)
             t(i,:) = i
          ENDDO
          PRINT*,t
       END SUBROUTINE implicite
DIMENSION(:,:) précise que t est un tableau de rang 2 et que son profil est implicite c-à-d qu'il sera fourni à la subroutine implicite lors de l'appel.

SIZE : Cette fonction intrinseque fournit l'étendue d'un tableau suivant une direction, ainsi

$ \bullet$ SIZE(t,1) fournit l'étendue de t suivant la première dimension

$ \bullet$ SIZE(t,2) fournit l'étendue de t suivant la deuxième dimension

$ \ominus$ Pour utiliser une procédure recevant en argument un tableau de profil implicit, son interface doit être connue.


Exemple utilisant les subroutines explicite et implicite

 
       PROGRAM affiche_tableau
          IMPLICIT NONE
          REAL, DIMENSION (4,0:9)    :: t1
          REAL, DIMENSION (4:10,3:7) :: t2
  
          INTERFACE
             SUBROUTINE implicite (t)
                IMPLICIT NONE
                REAL, DIMENSION (:,:), INTENT(INOUT) :: t
             END SUBROUTINE implicite
          END INTERFACE

          CALL implicite (t1)
          CALL implicite (t2)
          ! ----- De meme on peut faire la meme chose avec----
          CALL explicite (t1,SIZE(t1,1), SIZE(t1,2))
          CALL explicite (t2,SIZE(t2,1), SIZE(t2,2))
       END PROGRAM affiche_tableau
L'interface pour la subroutine est obligatoire sinon erreur d'exécution.
La correspondance entre tableau effectif et tableau muet est uniquement basée sur le profil. Les bornes exactes des indices n'ont aucune incidence sur le déroulement des opérations. Si nous faisons appel à $ t(1,1)$ dans la subroutine implicite, il s'agirait de $ t1(1,0)$ pour le premier et de $ t2(4,3)$ pour le second.
Il est plus prudent d'appeler explicite en utilisant la fonction SIZE.


next up previous contents
Next: Les tableaux automatiques Up: Tableaux transmis en argument Previous: Transmission explicite des étendues   Contents
Mazen Saad 2002-12-12