Leçons du module (2/2)
Tableaux et Clause OCCURS
En COBOL, il n’existe pas de mot-clé "array" ou "vecteur" pour définir des listes de données homogènes. Pour cet usage, on utilise la clause OCCURS, qui spécifie le nombre de fois qu’une variable ou une structure se répète en mémoire.
Définition d’un tableau avec OCCURS
La clause OCCURS est ajoutée à la déclaration d’une variable subordonnée (par exemple, de niveau 05 ou supérieur) au sein d’une structure de groupe (niveau 01) :
01 WS-SALES-DATA.
05 WS-MONTHLY-SALES PIC 9(4) OCCURS 12 TIMES.
Dans cet exemple, WS-MONTHLY-SALES est un tableau formé de 12 éléments numériques de 4 chiffres chacun. La mémoire allouée pour cet enregistrement sera d’exactement 12 * 4 = 48 caractères.
Accès aux éléments et indices
Pour accéder à un élément spécifique d’un tableau, on indique l’indice entre parenthèses immédiatement après le nom du champ.
[!IMPORTANT] Contrairement à la plupart des langages modernes qui utilisent des indices à base 0, COBOL utilise des indices à base 1. Le premier élément se trouve à l’indice
1, le deuxième à l’indice2, et ainsi de suite.
MOVE 1500 TO WS-MONTHLY-SALES(1).
MOVE 2400 TO WS-MONTHLY-SALES(2).
Parcours d’un tableau (Itération)
Pour parcourir les éléments d’un tableau, on peut utiliser l’instruction PERFORM VARYING ou gérer manuellement un compteur dans une boucle PERFORM UNTIL :
PERFORM UNTIL WS-INDEX > 12
DISPLAY "Sales: " WS-MONTHLY-SALES(WS-INDEX)
ADD 1 TO WS-INDEX
END-PERFORM.
À vous de jouer
Déclarez un tableau de 5 températures décimales (3 chiffres entiers et 1 décimale) sous la structure de groupe WS-WEATHER-DATA en utilisant la clause OCCURS.
Afficher l'indice
Écrivez : 05 WS-TEMPERATURE PIC 9(3)V9 OCCURS 5 TIMES.
Solution disponible après 3 tentatives
Initialisez les trois premiers éléments du tableau WS-MONTHLY-SALES avec les valeurs 1200, 1500 et 1800 respectivement à l’aide d’instructions MOVE. Rappelez-vous que les indices en COBOL commencent à 1.
Afficher l'indice
Utilisez MOVE 1200 TO WS-MONTHLY-SALES(1). pour le premier élément, puis répétez pour le deuxième et le troisième en utilisant les indices (2) et (3).
Solution disponible après 3 tentatives