COMPUTE |
Calcul |
|---|---|
| Cobol | |
Syntaxe
|
COMPUTE identifier1 [ROUNDED] = arithmeticexpression [; ON SIZE ERROR imperativestatement] |
Paramètres
| Nom | Description |
|---|---|
| identifier1 | Ce paramètre permet d'indiquer la variable ou l'élément de donnée dans lequel le résultat de l'expression arithmétique sera entreposé. C'est la cible du calcul, que l'on met à jour avec la valeur résultante. Cet identifiant doit être déclaré dans la section DATA DIVISION, typiquement dans le WORKING-STORAGE ou le LOCAL-STORAGE. |
| ROUNDED | Ce paramètre permet d'indiquer que le résultat du calcul doit être arrondi selon les règles d'arrondi classiques. Si la partie décimale dépasse ce que peut contenir le champ cible, COBOL arrondira le résultat plutôt que de simplement tronquer les décimales supplémentaires. Cela permet d'éviter des pertes de précision involontaires. |
| = | Ce paramètre permet d'indiquer une marque d'affectation, c'est-à-dire que le résultat de l'expression arithmétique placée à droite sera affecté à l'identifiant placé à gauche. Ce n'est pas un paramètre à proprement parler, mais un élément syntaxique fondamental dans l'instruction. |
| arithmeticexpression | Ce paramètre permet d'indiquer l'expression mathématique à évaluer. Elle peut inclure des constantes, d'autres identifiants (variables), et les opérateurs classiques (+, -, *, /, ** pour la puissance,...). COBOL évaluera cette expression de droite à gauche ou selon les parenthèses, puis entreposera le résultat dans identifier1. |
| ON SIZE ERROR | Ce paramètre permet d'indiquer un traitement alternatif si le résultat du calcul dépasse la capacité de la variable de destination (identifier1). Cela peut éviter des erreurs de troncation, d'arrondi excessif, ou de débordement. |
| imperativestatement | Ce paramètre permet d'indiquer une ou plusieurs instructions COBOL (généralement conditionnelles ou de journalisation) étant exécutées en cas d'erreur de taille détectée lors du calcul. Cette clause est importante dans les programmes critiques où la perte de données est inacceptable. |
Description
Cette instruction permet d'associer la valeur spécifié à une expression arithmétique d'item de données.
Remarques
- Cible de l'affectation (identifier1) : L'instruction COMPUTE commence par le paramètre identifier1, désignant la variable ou l'item de donnée dans lequel le résultat du calcul sera entreposé. Cette variable représente la cible du calcul et doit être déclarée dans la Data Division, généralement dans la WORKING-STORAGE ou la LOCAL-STORAGE. Sa bonne définition est cruciale car toute erreur de typage ou de format dans la déclaration peut entraîner des erreurs lors de l'exécution, voire des pertes de précision dans les opérations arithmétiques.
- Option d'arrondi (ROUNDED) : Le mot clef optionnel ROUNDED spécifie que le résultat de l'expression arithmétique doit être arrondi selon les règles d'arrondi classiques de COBOL. Ceci est particulièrement utile lorsque la partie décimale du résultat excède la capacité du champ destination défini dans la clause PICTURE. Grâce à ROUNDED, COBOL évite de tronquer brutalement la valeur et assure une représentation plus fidèle et plus robuste des nombres, ce qui est essentiel dans les calculs financiers ou scientifiques où la précision est primordiale.
- Marque d'affectation (=) : Le symbole = suivant identifier1 dans l'instruction n'est pas un paramètre au sens strict, mais une marque d'affectation essentielle. Il indique que le résultat du calcul, obtenu en évaluant l'arithmeticexpression, sera assigné à la variable mentionnée à gauche. Cette syntaxe fondamentale garantit que, dès que le calcul est effectué, la variable cible reçoit instantanément sa nouvelle valeur, assurant ainsi un flux de données cohérent et prévisible dans le programme.
- Expression arithmétique (arithmeticexpression) : Le paramètre arithmeticexpression est le cour du calcul dans l'instruction COMPUTE. Il permet de définir une expression mathématique qui peut inclure des littéraux numériques, d'autres variables et divers opérateurs arithmétiques tels que l'addition (+), la soustraction (-), la multiplication (*), la division (/), voire l'exponentiation (**). COBOL évalue cette expression en respectant la priorité des opérateurs et l'ordre des parenthèses, garantissant ainsi que le résultat final soit calculé précisément avant d'être entreposé dans identifier1.
- Gestion des dépassements (ON SIZE ERROR) : La clause optionnelle ON SIZE ERROR offre un moyen de gérer les éventuelles erreurs se produisant lorsque le résultat du calcul excède la capacité définie par le PICTURE de la variable cible. Par exemple, si l'expression arithmétique génère un nombre avec plus de chiffres que ne le permet le champ, COBOL peut déclencher cette clause pour exécuter une instruction spécifique destinée à gérer ce dépassement. Cela permet d'éviter des erreurs silencieuses ou des résultats erronés, améliorant ainsi la robustesse du programme.
- Instructions alternatives en cas d'erreur (imperativestatement) : Associé à ON SIZE ERROR, le paramètre imperativestatement permet de définir une ou plusieurs instructions alternatives à exécuter en cas de dépassement de capacité. Ces instructions peuvent être utilisées pour consigner une erreur, afficher un message d'alerte ou rediriger l'exécution vers un autre paragraphe de gestion d'erreur. Ceci est particulièrement important dans les applications critiques, où une erreur de formatage ou de débordement de données pourrait entraîner des conséquences importantes sur la fiabilité du traitement.
- Intégration dans une logique de calcul globale : L'instruction COMPUTE est souvent utilisée pour réaliser des opérations complexes en combinant plusieurs opérations arithmétiques en une seule expression. Cela permet de réduire le nombre d'instructions nécessaires et de rendre le code plus clair. Par exemple, une instruction COMPUTE peut être utilisée pour calculer une somme cumulée ou une moyenne en une seule ligne, ce qui simplifie la maintenance et la lecture du programme tout en garantissant que toutes les règles d'arrondi et de gestion d'erreur soient appliquées de manière cohérente.
- Importance de la cohérence des types de données : Un point essentiel lors de l'utilisation de COMPUTE est que la variable cible (identifier1) et les éléments de l'arithmeticexpression doivent être compatibles en termes de type de données. Par exemple, si l'on effectue des opérations sur des valeurs décimales, il est impératif que identifier1 soit déclarée avec une clause PIC permettant d'accueillir des décimales. La clause ON SIZE ERROR vient en complément, en permettant de détecter et de gérer toute incohérence de format ou dépassement, garantissant ainsi que les résultats soient toujours conformes aux attentes du programme.
Dernière mise à jour : Jeudi, le 28 juillet 2011