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


3.1 Exemple

 

Dans cet exemple, un programme complet est présenté. Il comprend essentiellement trois parties :

Le programme principal MODUXX
appelle deux modules MODUL1 et MODUL2, puis imprime la liste des tableaux dynamiques alloués.

Le module MODUL1
alloue trois tableaux T1, T2, T3, puis appelle l' algorithme ALGO qui utilise ces trois tableaux.

Le module MODUL2
alloue trois tableaux T4, T5, T6 et les utilise directement (ce type de programmation est néanmoins déconseillé, cf. section 3.4).

Programme principal MODUXX

      PROGRAM MODUXX
      PARAMETER (LM = 2 000 000)
      COMMON M(LM)
      CALL INITIS(M, LM, 0, 0)
      CALL MODUL1(M)
      CALL MODUL2(M, M, M)
      CALL IMATAB(M)
      END

Module MODUL1 et algorithme ALGO

      SUBROUTINE MODUL1(M)
      INTEGER M(*)
      CALL READRE(1, 'T1', IAT1, 100, M, ICODE)
      CALL READRE(2, 'T2', IAT2, 100, M, ICODE)
      NTYTAB = IINFO('REEL2')
      CALL TYPMOT(NTYTAB, NBREMO)
      CALL READRE(NTYTAB, 'T3', IAT3, 100*NBREMO, M, ICODE)
      CALL ALGO(M(IAT1), M(IAT2), M(IAT3))
      END

      SUBROUTINE ALGO(T1, T2, T3)
      INTEGER          T1(100)
      REAL             T2(100)
      DOUBLE PRECISION T3(100)
      DO 100 I = 1, 100
         T1(I) = 1
         T2(I) = 2.
         T3(I) = 3.D0
  100 CONTINUE
      END

Module MODUL2 (programmation déconseillée)

      SUBROUTINE MODUL2(M, XM, DM)
      INTEGER           M(*)
      REAL             XM(*)
      DOUBLE PRECISION DM(*)
      CALL READRE(1, 'T4', IAT4, 100, M, ICODE)
      CALL READRE(2, 'T5', IAT5, 100, M, ICODE)
      NTYTAB = IINFO('REEL2')
      CALL TYPMOT(NTYTAB, NBREMO)
      CALL READRE(NTYTAB, 'T6', IAT6, 100*NBREMO, M, ICODE)
      DO 100 I = 1, 100
          M( IAT4-1         + I) = 4
         XM( IAT5-1         + I) = 5.
         DM((IAT6-1)/NBREMO + I) = 6.D0
  100 CONTINUE
      END

Exécution

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++        IMPRESSION ALLOCATION DYNAMIQUE        ++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

LONGUEUR EST LE NOMBRE DE MOTS DEMANDES
ADRESSE  EST L'ADRESSE RETOURNEE
IAMARQUE EST L'ADRESSE DU DESCRIPTEUR DE TABLEAU
NB  MOTS EST LE NOMBRE DE MOTS REELLEMENT UTILISES
LE DERNIER MOT UTILISE DANS LE SUPER-TABLEAU EST :         829

--------------------------------------------------------------------
| ESPACE | TYPE | LONGUEUR | ADRESSE  | IAMARQUE | NB  MOTS | NOM
--------------------------------------------------------------------
| OCCUPE |    1 |      100 |        9 |        5 |      103 | T1
| OCCUPE |    2 |      100 |      113 |      109 |      103 | T2
| OCCUPE |    5 |      200 |      217 |      213 |      203 | T3
| OCCUPE |    1 |      100 |      421 |      417 |      103 | T4
| OCCUPE |    2 |      100 |      525 |      521 |      103 | T5
| OCCUPE |    5 |      200 |      629 |      625 |      203 | T6
| LIBRE  | .... | ........ | ........ |      829 |  1999171 |  ....
--------------------------------------------------------------------

Cet exemple met en évidence un certain nombre de points : la déclaration du super-tableau, les utilitaires de gestion des tableaux dynamiques, la programmation avec ces tableaux, et les problèmes dus aux réels double précision.


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