# COBOL/Opérations arithmétiques
## Affectation

L'instruction MOVE permet d'affecter la valeur d'une variable ou d'un littéral à une ou plusieurs variables :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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.
| Tableaux | Opérations sur les chaînes |