< COBOL
fin de la boite de navigation du chapitre

Affectation

L'instruction MOVE permet d'affecter la valeur d'une variable ou d'un littéral à une ou plusieurs variables :

Définition
MOVE x TO var1 var2 ...


Cette instruction va associer la valeur de x à chacune des variables situées après le TO et séparées par des espaces.

Calcul et affectation

Il est permis d'affecter des expressions plus complexes à des variables après un calcul. Pour cela, nous utilisons l'instruction COMPUTE, dont le format est le suivant :

Définition
COMPUTE {identificateur [ROUNDED]} ... = expression arithmétique
  [SIZE ERROR instructions]
[END-COMPUTE].


Les expressions arithmétiques intervenant dans un COMPUTE peuvent utiliser les opérateurs suivants : + (addition) - (soustraction) * (multiplication) / (division) ** ou ^ (exponentiation).

La valeur calculée de l’expression arithmétique à droite du signe d'égalité sera affectée à chaque variable situé à gauche de ce signe. Chacune de ces variables peut éventuellement être suivie de ROUNDED, qui arrondit arithmétiquement la valeur obtenue.

La clause optionnelle SIZE ERROR intercepte une erreur de dépassement de capacité du résultat. Si une telle erreur se produit, les instructions suivant cette clause sont exécutées.

L'instruction COMPUTE est utile pour des évaluations complexes, mais si vous n'avez pas besoin de cette "puissance", COBOL met à votre disposition d'autres instructions, plus spécialisées, qui consomment moins de ressources que COMPUTE.

Addition

L'instruction ADD permet d'ajouter une liste de valeurs à une liste de variables :

Définition
ADD a1 a2 ... TO {identificateur [ROUNDED]} ...
  [SIZE ERROR instructions]
[END-ADD].


Dans ce cas, une somme intermédiaire a1 + a2 + ... sera calculée puis ajoutée à chaque variable placée après le TO (chacune pouvant éventuellement être arrondie).

Soustraction

L'instruction SUBTRACT permet de soustraire une liste de valeurs d'une liste de variables :

Définition
SUBTRACT a1 a2 ... FROM {identificateur [ROUNDED]} ...
  [SIZE ERROR instructions]
[END-SUBTRACT].


Dans ce cas, une somme intermédiaire a1 + a2 + ... sera calculée puis soustraite à chaque variable placée après le FROM.

Multiplication

L'instruction MULTIPLY permet de multiplier une valeur à une liste de variables :

Définition
MULTIPLY x BY {identificateur [ROUNDED]} ...
  [SIZE ERROR instructions]
[END-MULTIPLY].


Dans ce cas, chacune des variables placées après le BY est multipliée par x. Il est également possible de stocker le résultat de cette multiplication dans d'autres variables, pour cela, nous utilisons le format suivant :

Définition
MULTIPLY x BY y GIVING {identificateur [ROUNDED]} ...
  [SIZE ERROR instructions]
[END-MULTIPLY].


Dans ce cas, le produit de x par y sera affecté à chaque variable placée après le GIVING.

Division

Ici aussi, nous avons 2 formats possibles. Voici le premier :

Définition
DIVIDE diviseur INTO {identificateur [ROUNDED]} ...
  [SIZE ERROR instructions]
[END-DIVIDE].


Dans ce cas, chaque variable située après INTO sera divisée par la valeur placée avant INTO. La division effectuée est une division euclidienne, ou division entière : on ne garde que la partie entière du quotient, le reste de cette division n’est pas récupéré.

Il est également possible de stocker le résultat de cette division dans d'autres variables, pour cela nous utilisons le second format de l'instruction DIVIDE :

Définition
DIVIDE x BY y GIVING {identificateur [ROUNDED]} ...
  [REMAINDER reste]
  [SIZE ERROR instructions]
[END-DIVIDE].


Dans ce cas, le résultat de la division de x par y sera affecté à toutes les variables situées après GIVING. Si la clause REMAINDER est présente, alors une seule variable pourra stocker ce résultat. Le reste de la division sera stocké dans la variable suivant le REMAINDER.

Une division par zéro déclenche la clause SIZE ERROR.

Exemple : une calculatrice basique

Voici un programme récapitulatif qui reprend toutes ces notions. Cette mini-calculatrice vous demande de saisir deux opérandes et un opérateur, puis vous affichera le résultat du calcul ou un message d'erreur. Essayez de refaire ce programme vous-mêmes pour vous exercer ou améliorez-le.

Exemple
000001 IDENTIFICATION DIVISION.
000002   PROGRAM-ID. calculatrice.
000003 
000004 DATA DIVISION.
000005   WORKING-STORAGE SECTION.
000006     77 a PIC 99.
000007     77 b PIC 99.
000008     77 op PIC X.
000009     77 result PIC S9999 VALUE 0.
000010 
000011 PROCEDURE DIVISION.
000012   saisie.
000013     DISPLAY "1er opérande : " NO ADVANCING ACCEPT a.
000014     DISPLAY "Opérateur    : " NO ADVANCING ACCEPT op.
000015     DISPLAY "2nd opérande : " NO ADVANCING ACCEPT b.
000016   evaluation.
000017     EVALUATE op
000018       WHEN "+" ADD a b TO result
000019       WHEN "-"
000020         MOVE a TO result SUBTRACT b FROM result
000021       WHEN "*" MULTIPLY a BY b GIVING result
000022       WHEN "/" DIVIDE a BY b GIVING result
000023       WHEN "^" COMPUTE result = a ^ b
000024       WHEN "%"
000025         DIVIDE a BY b GIVING result REMAINDER result
000026       WHEN OTHER DISPLAY "Opérateur incorrect !"
000027     END-EVALUATE.
000028   affichage.
000029     DISPLAY a SPACE op SPACE b " = " result.
000030     STOP RUN.
000031 END PROGRAM calculatrice.
Fin de l'exemple


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.