Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: 3.4 Programmation avec les tableaux dynamiques Sup.: 3 Tableaux dynamiques Préc.: Déclaration du super-tableau Index Table des matières


3.3 Utilitaires de gestion des tableaux dynamiques

   

Les utilitaires sont décrits dans cette section par ordre alphabétique.

Essentiellement, le programmeur initialise le super-tableau à l'aide de l'utilitaire INITIS (p. gif), alloue des tableaux dynamiques avec READRE, et les libère avec TUER. L'unicité du nom de chaque tableau (paramètre TAB) est à la charge du programmeur.

Les notations utilisées pour les utilitaires ci-dessous
sont les notations habituelles (cf. Annexe A).

Utilitaire IMATAB

  

SUBROUTINE IMATAB( )

INTEGER M(*)

Cet utilitaire imprime la liste de tous les tableaux dynamiques alloués dans M.

Utilitaire MAXTAM

  

SUBROUTINE MAXTAM( , , )

INTEGER M(*), IATAB, LTAB

Cet utilitaire détermine la taille maximale pouvant être allouée.

Attention : MAXTAM ne réserve pas l'espace-mémoire trouvé. L'utilisation habituelle est de la forme suivante :

      ...
C --- DETERMINER LA TAILLE MAXIMALE POUVANT ETRE ALLOUEE
      CALL MAXTAM(M, IATAB, LMAX)
C --- ALLOUER UN TABLEAU DE TAILLE MAXIMALE
      NTYTAB = ...
      TAB = ...
      CALL READRE(NTYTAB, TAB, IATAB, LMAX, M, ICODE)
C --- UTILISER CE TABLEAU
      ...
C --- DETERMINER LA TAILLE EFFECTIVEMENT UTILISEE
      LTAB = ...
C --- AJUSTER LA TAILLE DU TABLEAU
      CALL READRE(NTYTAB, TAB, IATAB, LTAB, M, ICODE)
      ...

Remarque : lorsque plusieurs tableaux de grande taille doivent être alloués, il est nécessaire d'appeler MAXTAM plusieurs fois :

      ...
C ALLOUER DEUX GRANDS TABLEAUX DE TAILLES VOISINES
      CALL MAXTAM(M, IAT1, LMAX)
      CALL READRE(1, 'T1', IAT1, LMAX/2, M, ICODE)
      CALL MAXTAM(M, IAT2, LMAX)
      CALL READRE(2, 'T2', IAT2, LMAX, M, ICODE)
      ...

Utilitaire READRE

  

SUBROUTINE READRE( , , , , , )

INTEGER NTYTAB, IATAB, LTAB, M(*), ICODE

CHARACTER*(*) TAB

Cet utilitaire alloue un tableau (les éléments de ce tableau ne sont pas initialisés).

En sortie, ICODE vaut 1 si le tableau existait avec la même longueur et le même type, 0 sinon.

Si LTAB = 0, aucun tableau n'est alloué mais en sortie IATAB = 1. En effet, si IATAB n'était pas initialisé, le passage de M(IATAB) en paramètre pourrait déclencher une erreur d'exécution.

Si le super-tableau ne contient pas un tableau de même nom, l'allocation ne pose aucune difficulté. En revanche, si un tableau de même nom existe déjà, il est ``réalloué'' de la façon suivante :

Soient NTYTAB le type demandé, NTYTAB le type de l'ancien tableau, LTAB la longueur demandée, LTAB la longueur de l'ancien tableau.

Si NTYTAB NTYTAB,
l'ancien tableau est supprimé et le nouveau est alloué.

Si NTYTAB = NTYTAB,
LTAB est comparé à LTAB :
Si LTAB < LTAB,
la longueur est ajustée.
Si LTAB > LTAB,
l'ancien tableau est supprimé et le nouveau est alloué ; attention, le contenu n'est pas copié dans le nouveau tableau.
Si LTAB = LTAB,
aucun tableau n'est alloué puisque l'ancien est correct.

Utilitaire RENOMM

  

SUBROUTINE RENOMM( , , , , )

CHARACTER*(*) ANCTAB, NOUTAB

INTEGER IATAB, LTAB, M(*)

Cet utilitaire renomme un tableau.

ANCTAB est l'ancien nom du tableau, NOUTAB le nouveau.

Attention : des erreurs sont possibles si ANCTAB et NOUTAB n'ont pas le même nombre de caractères.

Utilitaire TROUVE

  

SUBROUTINE TROUVE( , , , , , )

INTEGER NTYTAB, IATAB, LTAB, ICODE, M(*)

CHARACTER*(*) TAB

Cet utilitaire cherche un tableau d'après son nom. S'il est trouvé, les paramètres de sortie sont mis à jour. Sinon, en sortie.

Le paramètre ICODE est conservé pour compatibilité seulement.

Remarque : en principe, le programmeur doit conserver l'adresse IATAB retournée par READRE et éviter d'appeler TROUVE (mais ce n'est pas toujours possible !).

Utilitaire TUER

  

SUBROUTINE TUER( , )

CHARACTER*(*) TAB

INTEGER M(*)

Cet utilitaire libère un tableau (l'espace libéré devient disponible pour une nouvelle allocation). Par exemple, en fin de module, tous les tableaux de travail doivent être détruits de cette manière.

Utilitaire TYPCLA

  

SUBROUTINE TYPCLA( , , )

INTEGER NTYTAB, NM1, NM2

Cet utilitaire retourne en clair, sur les deux entiers NM1 et NM2 (imprimables en format Fortran 2A4), le type NTYTAB d'un tableau : ENTIER, REEL1MOT, LOGIQUE, CARACTER, REEL2MOT, COMPLEXE, COMPLEX2.

Utilitaire TYPMOT

  

SUBROUTINE TYPMOT( , )

INTEGER NTYTAB, NBREMO

Cet utilitaire retourne le nombre de mots occupés par un élément de tableau de type NTYTAB. Par exemple, retourne , retourne , ...


Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: 3.4 Programmation avec les tableaux dynamiques Sup.: 3 Tableaux dynamiques Préc.: Déclaration du super-tableau Index Table des matières