< COBOL
fin de la boite de navigation du chapitre


Les boucles, ou structures répétitives, ou encore structures itératives permettent de répéter une certaine séquence d'instructions un certain nombre de fois, ou bien tant qu'une condition est vérifiée. L'instruction PERFORM nous permet d’utiliser de telles structures ; voyons les différents formats de cette instruction.

Itérer en fonction d'une condition

Définition
PERFORM [TEST {BEFORE|AFTER}] UNTIL [NOT] condition
  instructions
END-PERFORM.


En utilisant ce format, les instructions du corps de la boucle seront exécutées jusqu'à ce que la condition énoncée après le UNTIL soit vérifiée. Le NOT permet de nier cette condition.

La clause facultative TEST BEFORE|AFTER précise si le test de la condition doit se faire avant ou après chaque exécution de la boucle. Si vous faites le test après (TEST AFTER), la boucle sera parcourue au moins une fois. Le comportement par défaut est celui du TEST BEFORE, c'est-à-dire que l’on teste la condition avant d'entrer dans la boucle.

Voici un premier exemple dans lequel on boucle jusqu'à ce que l'utilisateur entre 1 ou 2 au clavier :

Exemple
000001 IDENTIFICATION DIVISION.
000002   PROGRAM-ID. ex-boucle.
000003 
000004 DATA DIVISION.
000005   WORKING-STORAGE SECTION.
000006     77 saisie PIC 9 VALUE 0.
000007       88 correcte VALUE 1, 2.
000008 COBOL
000009 PROCEDURE DIVISION.
000010   main.
000011     PERFORM TEST AFTER UNTIL correcte
000012       DISPLAY "saisie = " NO ADVANCING
000013       ACCEPT saisie
000014     END-PERFORM.
000015     DISPLAY "Saisie correcte !".
000016     STOP RUN.
000017 END PROGRAM ex-boucle.
Fin de l'exemple


On déclare une variable saisie (initialisée à 0) et une variable conditionnelle associée, correcte qui vaut TRUE quand saisie vaut 1 ou 2. On définit ensuite une boucle qui s'exécute jusqu'à ce que correcte soit vérifiée (donc avec saisie = 1 ou = 2).

Itérer un certain nombre de fois

Définition
PERFORM n TIMES
  instructions
END-PERFORM.


Ce format de l'instruction PERFOM nous permet d'exécuter les instructions de la boucle exactement n fois. Dans ce cas, n doit être un entier naturel.

Voici par exemple un programme qui demande à l'utilisateur de saisir une phrase et un entier et qui répète autant de fois cette phrase :

Exemple
000001 IDENTIFICATION DIVISION.
000002   PROGRAM-ID. ex-boucle.
000003 
000004 DATA DIVISION.
000005   WORKING-STORAGE SECTION.
000006     77 phrase PIC X(40).
000007     77 n      PIC 99.
000008 
000009 PROCEDURE DIVISION.
000010   main.
000011     DISPLAY "Phrase : " NO ADVANCING ACCEPT phrase.
000012     DISPLAY "Répétitions : " NO ADVANCING ACCEPT n.
000013     PERFORM n TIMES
000014       DISPLAY phrase
000015     END-PERFORM.
000016     STOP RUN.
000017 END PROGRAM ex-boucle.
Fin de l'exemple

Itérer avec un compteur

Définition
PERFORM VARYING i FROM x BY y UNTIL [NOT] condition
  instructions
END-PERFORM.


En utilisant ce dernier format, les instructions du corps de la boucle seront exécutées jusqu'à ce que la condition énoncée après le UNTIL soit vraie. Le NOT permet, là aussi, de nier cette condition. Cette condition doit être une condition numérique (égalité, infériorité, supériorité, différence, etc.).

i doit être un identificateur de variable numérique, il sera modifié à chaque itération : il fera office de compteur. Il doit figurer dans la condition de sortie de cette boucle.

x doit être de type numérique, il indiquera la valeur prise par le compteur pour la première itération.

y doit également être de type numérique, il indique le pas du compteur : c’est la valeur qui sera ajoutée au compteur à chaque itération.

Voici un exemple dans lequel on utilise ce dernier format :

Exemple
000001 IDENTIFICATION DIVISION.
000002   PROGRAM-ID. ex-boucle.
000003 
000004 DATA DIVISION.
000005   WORKING-STORAGE SECTION.
000006     77 k   PIC 99.
000007     77 compteur PIC 99.
000008 
000009 PROCEDURE DIVISION.
000010   main.
000011     DISPLAY "k : " NO ADVANCING ACCEPT k.
000012     PERFORM VARYING compteur FROM 1 BY 2 UNTIL compteur > k
000013       DISPLAY compteur " ; " NO ADVANCING
000014     END-PERFORM.
000015     STOP RUN.
000016 END PROGRAM ex-boucle.
Fin de l'exemple


On demande à l'utilisateur un entier k, on va ensuite lister tous les nombres impairs de 1 jusqu'à k. La variable compteur va contenir successivement chacun de ces nombres impairs.


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.