IDENTIFICATION DIVISION.
PROGRAM-ID. EXO-SUBTRACT-11.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-TOTAL PIC 999 VALUE 000.
01 WS-RETRAIT PIC 999 VALUE 000.
01 WS-RESTE PIC 999 VALUE 000.
PROCEDURE DIVISION.
DISPLAY "Entrez un total (000 a 999) : "
ACCEPT WS-TOTAL
DISPLAY "Entrez un retrait (000 a 999) : "
ACCEPT WS-RETRAIT
MOVE WS-TOTAL TO WS-RESTE
SUBTRACT WS-RETRAIT FROM WS-RESTE
DISPLAY "Reste : " WS-RESTE
STOP RUN.
Lecture simple
On copie d’abord le total dans WS-RESTE. Ensuite SUBTRACT WS-RETRAIT FROM WS-RESTE enlève le retrait du reste. Cela évite de “détruire” la valeur originale du total, ce qui est pratique pour relire et déboguer.
Votre micro-exercice
Faites ces 3 modifications :
- Ajoutez un message si le retrait est supérieur au total (afficher “Retrait trop grand”).
- Affichez aussi le total original après le calcul, pour vérifier qu’il n’a pas changé.
- Testez avec un total 050 et un retrait 060 pour voir ce qui se passe, puis corrigez votre logique.
Erreur fréquente à éviter
Se tromper de sens : écrire SUBTRACT WS-TOTAL FROM WS-RETRAIT par erreur. Vous auriez alors un calcul inverse et un résultat incohérent.
Autre piège : choisir une variable trop courte. Si vous autorisez 999, il faut au moins PIC 999. Si vous mettez PIC 99, vous limitez à 99 et vous créez des dépassements.