< COBOL
fin de la boite de navigation du chapitre
Définition

Un tableau est un ensemble fini d'éléments du même type. Il ne peut contenir qu'un nombre fixe d'éléments, ce nombre est la taille du tableau.


Définition d'un tableau

Les tableaux sont définis dans la DATA DIVISION comme les autres variables. Pour préciser qu'une variable est un tableau, il faut préciser dans sa définition la clause OCCURS qui se présente comme suit :

OCCURS n

n est la taille du tableau : le nombre de fois que ce type d'éléments sera présent dans le tableau.

Une variable ne peut être définie comme étant un tableau que si son niveau est différent de 01, 77 et 88. Et ce qui était valable pour les variables complexes l'est aussi pour les tableaux : une image ne peut être définie que pour le dernier niveau des variables.

Voici par exemple la définition d'une variable complexe tableau contenant une variable numérique indice et le tableau à proprement parler : case qui peut contenir 10 valeurs numériques.

Exemple
01 tableau.
  02 indice PIC 99.
  02 case   PIC 99 OCCURS 10.
Fin de l'exemple

Accéder à un tableau

Tout d’abord, sachez que les éléments stockés dans le tableau sont référencés avec des indices : l'élément dans la première "case" d'un tableau a pour indice 1, le deuxième l'indice 2, ..., le dernier indice est égal à la taille du tableau. Pour accéder à un élément, vous devez faire suivre l'identificateur du tableau de l'indice de cet élément entre parenthèses. Comme ceci :

Exemple
case ( i )
Fin de l'exemple


i est un entier compris entre 1 et la taille du tableau. Voici un exemple dans lequel nous reprenons notre variable complexe tableau. Nous utilisons une boucle pour afficher tous les éléments du tableau ; l'indice i varie de 1 à 10 (taille du tableau) :

Exemple
000001 IDENTIFICATION DIVISION.
000002   PROGRAM-ID. ex-tableaux.
000003 
000004 DATA DIVISION.
000005   WORKING-STORAGE SECTION.
000006     01 tableau.
000007       02 i      PIC 99.
000008       02 case   PIC 99 OCCURS 10.
000009 
000010 PROCEDURE DIVISION.
000011   main.
000012     PERFORM VARYING i FROM 1 BY 1 UNTIL i > 10
000013       DISPLAY case ( i ) SPACE NO ADVANCING
000014     END-PERFORM.
000015     STOP RUN.
000016 END PROGRAM ex-tableaux.
Fin de l'exemple

Initialisation d'un tableau avec une autre variable

Il est possible d’utiliser une autre variable pour initialiser un tableau. Considérons une variable a, de niveau XX qui servira pour l'initialisation. On définit la clause REDEFINES, de même niveau XX et on précise qu'elle porte sur la variable a. On définit ensuite notre tableau b, de niveau XY supérieur à XX. Les images de a et b doivent être compatibles.

Définition
XX a PIC ... VALUE ...
XX REDEFINES a.
  XY b PIC ... OCCURS ...


Voici par exemple une chaîne de 10 caractères, que nous utilisons pour initialiser un tableau de 5 cases stockant 2 caractères :

Exemple
01 chaine PIC X(10) VALUE "AaBbCcDdEe".
01 REDEFINES chaine.
  02 tableau PIC XX OCCURS 5.
Fin de l'exemple


Dans cet exemple, chaine va être découpée en 5 fois 2 caractères, ces paires vont être stockées dans tableau. La même chose peut être faite avec des types numériques.

Tableaux de taille variable

Il est possible de définir des tableaux de taille variable. Pour cela, il suffit d’utiliser une variante de la clause OCCURS définie comme suit :

Définition
OCCURS n TO m DEPENDING z


n et m sont des entiers naturels (littéraux) et z un identificateur de variable numérique. Ainsi, la taille z du tableau sera telle que n <= z <= m.

Tableaux à plusieurs dimensions

Nous pouvons également définir des tableaux à plusieurs dimensions (7 dimensions au maximum) : des tableaux de tableaux, ou tableaux imbriqués. Néanmoins, seul le tableau le plus externe (avec le niveau le plus élevé) peut être défini comme étant de taille variable.

Définissons par exemple un tableau à 2 dimensions de type 3 × 2 : la première dimension est un tableau de 3 cases, dans chacune de ces cases est stocké un tableau de 2 cases. Nous pouvons donc y stocker 6 valeurs de type numérique :

Exemple
01 tableau.
  02 tableau-1 OCCURS 3.
    03 tableau-2 OCCURS 2 PIC 99.
Fin de l'exemple


On pourrait le schématiser ainsi :

[ 00 00 ]
[ 00 00 ]
[ 00 00 ]

Pour accéder aux valeurs d'un tableau à plusieurs dimensions, on indique l'identificateur du tableau suivi des indices correspondant à la position de l'élément dans chacune des dimensions (entre parenthèses, séparés par des virgules). L'ordre des indices suit l’ordre de définition de leurs dimensions : tableau ( indice-dim1, indice-dim2, indice-dim3, ... ). Ces combinaisons d'indices sont les coordonnées de la variable dans le tableau.

Pour notre exemple, voici comment accéder aux différentes variables :

[ (1, 1) (1, 2) ]
[ (2, 1) (2, 2) ]
[ (3, 1) (3, 2) ]

Voici un programme d'exemple, dans lequel on imbrique deux boucles pour parcourir le tableau. i-1 est l'indice permettant d'accéder à la première dimension du tableau (tableau-1), il varie de 1 à 3. i-2 est l'indice permettant d'accéder à la seconde dimension du tableau (tableau-2), il varie de 1 à 2.

Exemple
000001 IDENTIFICATION DIVISION.
000002   PROGRAM-ID. ex-tableaux.
000003 
000004 DATA DIVISION.
000005   WORKING-STORAGE SECTION.
000006     01 tableau.
000007       02 i-1 PIC 9.
000008       02 i-2 PIC 9.
000009       02   tableau-1 OCCURS 3.
000010         03 tableau-2 OCCURS 2 PIC 99.
000011 
000012 PROCEDURE DIVISION.
000013   main.
000014     PERFORM VARYING i-1 FROM 1 BY 1 UNTIL i-1 > 3
000015       PERFORM VARYING i-2 FROM 1 BY 1 UNTIL i-2 > 2
000016         DISPLAY tableau-2 ( i-1, i-2 ) SPACE NO ADVANCING
000017       END-PERFORM
000018       DISPLAY SPACES
000019     END-PERFORM.
000020     STOP RUN.
000021 END PROGRAM ex-tableaux.
Fin de l'exemple


Vous pouvez modifier ce programme pour ajouter des dimensions et/ou modifier les tailles des dimensions et ainsi voir les résultats produits.


Cet article est issu de Wikiversity. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.