ADD, SUBTRACT, MULTIPLY, DIVIDE et COMPUTE
Les verbes arithmétiques ADD, SUBTRACT, MULTIPLY et DIVIDE permettent d'effectuer des opérations de base sur des nombres en COBOL. Le verbe plus moderne COMPUTE gère des expressions complexes avec parenthèses et opérateurs (+, -, *, /, **). Ces instructions s'utilisent dans la PROCEDURE DIVISION pour manipuler des variables numériques déclarées en DATA DIVISION.
Exemple de code : Calculatrice simple
IDENTIFICATION DIVISION.
PROGRAM-ID. CALCULS-EXEMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NOMBRE1 PIC 9(3)V99 VALUE 10.50.
01 NOMBRE2 PIC 9(3)V99 VALUE 5.25.
01 RESULTAT-ADD PIC 9(4)V99.
01 RESULTAT-SUB PIC 9(4)V99.
01 RESULTAT-MUL PIC 9(4)V99.
01 RESULTAT-DIV PIC 9(4)V99.
01 RESULTAT-COMPUTE PIC 9(5)V99.
PROCEDURE DIVISION.
ADD NOMBRE1 NOMBRE2 TO RESULTAT-ADD.
SUBTRACT NOMBRE2 FROM NOMBRE1 GIVING RESULTAT-SUB.
MULTIPLY NOMBRE1 BY NOMBRE2 GIVING RESULTAT-MUL.
DIVIDE NOMBRE1 BY NOMBRE2 GIVING RESULTAT-DIV.
COMPUTE RESULTAT-COMPUTE = ( ((NOMBRE1 + NOMBRE2) * (2 ** 2)) / 3 ).
DISPLAY "Addition : " RESULTAT-ADD.
DISPLAY "Soustraction : " RESULTAT-SUB.
DISPLAY "Multiplication : " RESULTAT-MUL.
DISPLAY "Division : " RESULTAT-DIV.
DISPLAY "Compute complexe : " RESULTAT-COMPUTE.
STOP RUN.
Télécharger le code
Résultat attendu à l'exécution
La sortie dans la console sera :
Addition : 0015.75
Soustraction : 0005.25
Multiplication : 0055.12
Division : 0002.00
Compute complexe : 0021.00
Note : Les résultats sont affichés avec des zéros à gauche selon la taille du PIC (on verra comment formater mieux plus tard).
Explication détaillée – ligne par ligne (focus sur les verbes arithmétiques)
ADD NOMBRE1 NOMBRE2 TO RESULTAT-ADD.
ADDadditionneNOMBRE1etNOMBRE2, et ajoute le résultat à la variableRESULTAT-ADD(qui était initialement à zéro).
Syntaxe de base :ADD source1 source2 TO destination.
Pour les débutants : C'est comme dire "ajoute ces deux nombres et mets le total dans cette boîte". On peut ajouter plusieurs sources :ADD A B C TO D.SUBTRACT NOMBRE2 FROM NOMBRE1 GIVING RESULTAT-SUB.
SUBTRACTsoustraitNOMBRE2deNOMBRE1et stocke le résultat dansRESULTAT-SUB.
Syntaxe :SUBTRACT source FROM valeur GIVING destination.
SansGIVING, cela modifie directement la variable aprèsFROM(ex. :SUBTRACT A FROM Bmet B = B - A).
Pour les débutants : Imaginez une balance où vous enlevez un poids pour calculer la différence.MULTIPLY NOMBRE1 BY NOMBRE2 GIVING RESULTAT-MUL.
MULTIPLYmultiplieNOMBRE1parNOMBRE2et place le produit dansRESULTAT-MUL.
Syntaxe :MULTIPLY valeur BY multiplicateur GIVING destination.
SansGIVING, cela modifie la variable aprèsBY.
Pour les débutants : C'est pour répéter une addition plusieurs fois, comme calculer un prix total.DIVIDE NOMBRE1 BY NOMBRE2 GIVING RESULTAT-DIV.
DIVIDEdiviseNOMBRE1parNOMBRE2et stocke le quotient dansRESULTAT-DIV.
Syntaxe :DIVIDE dividende BY diviseur GIVING destination.
On peut ajouterREMAINDERpour le reste :GIVING quotient REMAINDER reste.
Attention aux divisions par zéro (erreur à l'exécution) !
Pour les débutants : Partagez un gâteau en parts égales ; le résultat est combien par part.COMPUTE RESULTAT-COMPUTE = (( ((NOMBRE1 + NOMBRE2) * (2 ** 2)) / 3 ).
COMPUTEévalue une expression arithmétique complète et assigne le résultat à une variable.
Syntaxe :COMPUTE destination = expression.
Opérateurs : + (addition), - (soustraction), * (multiplication), / (division), ** (exponentiation).
Priorités : ** d'abord, puis * et /, puis + et - ; utilisez des parenthèses pour grouper.
Pour les débutants : C'est comme une calculatrice en ligne de commande – plus flexible que les autres verbes pour des calculs compliqués.
Points clés pour débutants :
• Toutes les variables doivent être numériques (
• Attention aux décimales : le
•
• Testez toujours avec des valeurs pour éviter les débordements (overflow).
• Toutes les variables doivent être numériques (
PIC 9... ou PIC S9... pour négatifs).• Attention aux décimales : le
PIC de la destination doit avoir assez de places (avant/après V).•
COMPUTE est recommandé pour les nouveaux programmes car plus lisible.• Testez toujours avec des valeurs pour éviter les débordements (overflow).
Prochain sujet : Conditions et branchements avec IF, ELSE et EVALUATE.