Index du tour guidé

Bienvenue dans la formation COBOL

Apprenez les bases du COBOL et développez vos compétences en programmation legacy avec une approche moderne.

Info : Ce module vous permet d’accéder rapidement aux contenus essentiels de la formation COBOL.
Retour au plan général
Navigation rapide
Utilisez ces boutons si vous voulez accéder directement à une page, sans parcourir les cartes.
1 2 3 4 5 6 7 8 9 10

Leçon 4 : calculs et sécurité de taille

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 .

Débutant Sécurité Exercices
🧮
Idée clé
En Cobol, un calcul n’est correct que si le résultat tient dans le champ. La taille d’un champ est un contrat. Si vous dépassez, vous devez décider quoi faire : gérer l’erreur, ajuster le format, ou stocker dans un champ plus large.
🧠

Conceptualiser

Arithmétique

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 
Additionne des valeurs. Variante pratique :  GIVING  pour stocker le résultat ailleurs.
➖
 SUBTRACT 
Soustrait une valeur d’une autre. Souvent utilisé pour des soldes et des écarts.
✖️
 MULTIPLY 
Multiplie, utile pour des totaux (quantité × prix) et des coefficients.
➗
 DIVIDE 
Divise. Avant de diviser, testez toujours le diviseur pour éviter la division par zéro.
🧾
 COMPUTE 
Écrit une expression plus “mathématique”, pratique pour des formules plus longues.
🧯
 ON  SIZE  ERROR 
Gère le cas où le résultat ne “rentre pas” dans le champ cible. Indispensable en environnement strict.
💡 Quand vous apprenez, mettez des champs de résultat plus larges que nécessaire, puis réduisez ensuite.
🧪

Opérer

Calculer proprement

Exemple complet : addition, formule avec  COMPUTE , puis test d’un dépassement avec  ON  SIZE  ERROR .

🧾Fichier : demo-math.cbl
Cobol (format libre)

 >>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.
▶️ Compilation (exemple)
cobc -x -free demo-math.cbl
Lancez ensuite l’exécutable généré par votre environnement.
✅ Ce que vous validez
  • Résultat via  GIVING 
  • Formule via  COMPUTE 
  • Gestion dépassement
🧯

Déboguer

Erreurs typiques

Les bugs arithmétiques viennent rarement du calcul lui-même : ils viennent du format des champs.

  • Résultat tronqué : le champ de sortie est trop petit pour contenir le résultat.
  • Résultat incohérent en environnement strict : sans gestion de taille, vous risquez un dépassement non maîtrisé.
🔎 Réflexe utile

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.

🧭

Expliquer et explorer

Exercices

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.

📌 Règle pratique
Pour un total (exemple : quantité × prix), prévoyez un champ résultat plus large que les deux champs d’origine. La multiplication augmente vite le nombre de chiffres.

🧩 Exercices (à faire tout de suite)

  1. Faites une multiplication avec  MULTIPLY  et stockez dans un champ plus large.
  2. Faites une division et gérez le cas où la division par zéro arrive (en testant avant).

 >>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.
💡 Ici,  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.
⚠️ Toujours tester le diviseur avant  DIVIDE , surtout en code métier.

↑ Haut