# 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

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 :
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

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 :
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) :

## 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.
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

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 :
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 :
On pourrait le schématiser ainsi :
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 :
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.
Vous pouvez modifier ce programme pour ajouter des dimensions et/ou modifier les tailles des dimensions et ainsi voir les résultats produits.
| Boucles | Opérations arithmétiques |