Apprenez les bases du COBOL et développez vos compétences en programmation legacy avec une approche moderne.
Objectif : réaliser des opérations fiables avec ADD ,
SUBTRACT , MULTIPLY ,
DIVIDE et COMPUTE ,
tout en évitant les mauvaises surprises grâce à ON SIZE ERROR .
Cobol propose des opérations très explicites. L’idée est d’écrire des calculs lisibles et de maîtriser les erreurs de taille.
ADD
GIVING pour stocker le résultat ailleurs.
SUBTRACT
MULTIPLY
DIVIDE
COMPUTE
ON SIZE ERROR
Exemple complet : addition, formule avec COMPUTE , puis test d’un dépassement
avec ON SIZE ERROR .
>>SOURCE FORMAT FREE
IDENTIFICATION DIVISION.
PROGRAM-ID. DEMO-MATH.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-A PIC 9(3) VALUE 0.
01 WS-B PIC 9(3) VALUE 0.
01 WS-RES PIC 9(4) VALUE 0.
01 WS-SMALL PIC 9(1) VALUE 0.
PROCEDURE DIVISION.
MOVE 250 TO WS-A
MOVE 125 TO WS-B
ADD WS-A TO WS-B GIVING WS-RES
DISPLAY "Resultat ADD : " WS-RES
COMPUTE WS-RES = WS-A + WS-B
DISPLAY "Resultat COMPUTE : " WS-RES
MOVE 9 TO WS-SMALL
ADD 1 TO WS-SMALL
ON SIZE ERROR
DISPLAY "Depassement : champ trop petit"
END-ADD
DISPLAY "Small : " WS-SMALL
STOP RUN.
cobc -x -free demo-math.cbl
GIVING COMPUTE Les bugs arithmétiques viennent rarement du calcul lui-même : ils viennent du format des champs.
Avant d’accuser le code, vérifiez la déclaration : combien de chiffres “rentrent” réellement dans le champ cible.
Ajustez le PIC ou utilisez un champ résultat plus large.
La taille d’un champ est un contrat : les systèmes de gestion préfèrent un dépassement géré explicitement plutôt qu’un résultat silencieusement faux.
MULTIPLY et stockez dans un champ plus large.
>>SOURCE FORMAT FREE
IDENTIFICATION DIVISION.
PROGRAM-ID. EXO-MULTIPLY.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-QTE PIC 9(3) VALUE 0.
01 WS-PRIX PIC 9(4) VALUE 0.
01 WS-TOTAL PIC 9(7) VALUE 0.
PROCEDURE DIVISION.
MOVE 125 TO WS-QTE
MOVE 1999 TO WS-PRIX
MULTIPLY WS-QTE BY WS-PRIX GIVING WS-TOTAL
DISPLAY "Total = " WS-TOTAL
STOP RUN.
WS-TOTAL est plus large pour absorber le résultat sans risque.
>>SOURCE FORMAT FREE
IDENTIFICATION DIVISION.
PROGRAM-ID. EXO-DIVIDE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM PIC 9(5) VALUE 0.
01 WS-DEN PIC 9(5) VALUE 0.
01 WS-QUOT PIC 9(5) VALUE 0.
PROCEDURE DIVISION.
MOVE 1000 TO WS-NUM
MOVE 0 TO WS-DEN
IF WS-DEN = 0
DISPLAY "Erreur : division par zero"
ELSE
DIVIDE WS-NUM BY WS-DEN GIVING WS-QUOT
DISPLAY "Quotient = " WS-QUOT
END-IF
STOP RUN.
DIVIDE , surtout en code métier.