COBOL/Tableaux
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
modifierLes 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.
Accéder à un tableau
modifierTout 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 :
où 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) :
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.
Initialisation d'un tableau avec une autre variable
modifierIl 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.
Voici par exemple une chaîne de 10 caractères, que nous utilisons pour initialiser un tableau de 5 cases stockant 2 caractères :
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
modifierIl 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 :
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
modifierNous 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 :
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 point-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.
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.
Vous pouvez modifier ce programme pour ajouter des dimensions et/ou modifier les tailles des dimensions et ainsi voir les résultats produits.