Aller au contenu

Code opération RPG III / RPG/400 · IBM i (AS/400) · Calculs

ADD

Additionner

Additionne le facteur 1 et le facteur 2 dans la zone résultat ; sans facteur 1, ajoute le facteur 2 à la zone résultat.

Syntaxe

     C           facteur1  ADD  facteur2  result  72
     C                     ADD  facteur2  result  72
     C           facteur1  ADD  facteur2  result  72H
Facteur 1 (18-27)
Premier terme de la somme : une zone numérique ou un littéral. Facultatif : s'il est absent, la zone résultat sert de premier terme (result = result + facteur 2).
Facteur 2 (33-42)
Second terme : une zone numérique ou un littéral.
Zone résultat (43-48)
Reçoit la somme. Le nom fait 6 caractères au plus.
Longueur (49-51)
Longueur totale de la zone résultat, décimales comprises. Renseignée quand la zone apparaît pour la première fois dans le programme : c'est ce qui la définit. Sans longueur, une zone encore inconnue provoque QRG7030, « La zone ou l'indicateur n'est pas défini ».
Décimales (52)
Nombre de décimales de la zone résultat ; 0 pour un entier.
Colonne 53
H demande l'arrondi (demi supérieur) : si le résultat a plus de décimales que la zone résultat, le résultat est arrondi à la valeur la plus proche (1,09945 devient 1,10 pour deux décimales). Sans H, les décimales en trop sont simplement coupées, sans arrondi.
Indicateurs de conditionnement (9-17)
Facultatif : l'opération n'est exécutée que si les indicateurs indiqués ont l'état demandé.
Effet
La zone résultat contient la somme. Si le résultat ne tient pas dans la zone, les chiffres de gauche sont perdus sans message ni indicateur ; la valeur obtenue n'est alors plus la somme.

À quoi ça sert

ADD sert à cumuler : totaux de facture, compteurs, soldes. La forme à deux opérandes (facteur 1 absent) est la plus courante dans les programmes en production : ADD 1 COMPT incrémente un compteur.

La zone résultat est définie par la première opération qui la mentionne avec une longueur et des décimales ; les emplois suivants peuvent les omettre.

Exemple 1 : Deux et trois opérandes

     H*  ADD : 2 et 3 operandes, zone resultat definie par longueur
     C                     Z-ADD100       TOTAL   72
     C                     ADD  25.5      TOTAL
     C           'Total'   DSPLY
     C           TOTAL     DSPLY
     C                     Z-ADD180       PRIXHT  72
     C                     Z-ADD35.60     TVA     72
     C           PRIXHT    ADD  TVA       PRIXTT  72
     C           'Prix TTC'DSPLY
     C           PRIXTT    DSPLY
     C                     SETON                     LR

Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :

Total
  12550
Prix TTC
  21560

Z-ADD 100 met le total à 100,00, puis ADD 25.5 TOTAL (sans facteur 1) donne 125,50, affiché 12550. Avec PRIXHT ADD TVA PRIXTT les deux termes sont dans les facteurs et la zone résultat PRIXTT est définie à la volée en 7 chiffres dont 2 décimales : 180,00 + 35,60 = 215,60.

Exemple 2 : Les chiffres de gauche sont perdus

     H*  ADD : troncature des chiffres de gauche, sans erreur
     C                     Z-ADD900       GRAND   50
     C                     ADD  200       GRAND
     C           'Zone 5'  DSPLY
     C           GRAND     DSPLY
     C                     Z-ADD900       PETIT   30
     C                     ADD  200       PETIT
     C           'Zone 3'  DSPLY
     C           PETIT     DSPLY
     C                     SETON                     LR

Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :

Zone 5
 1100
Zone 3
100

900 + 200 font 1100. Dans une zone de 5 chiffres le résultat est correct ; dans une zone de 3 chiffres il devient 100, sans erreur ni indicateur : le « 1 » de gauche a disparu.

Le piège

Aucune erreur sur un dépassement de capacité. Dans le second exemple, PETIT (3 chiffres) reçoit 900 + 200 et contient 100 : le programme continue avec une somme fausse. Dimensionnez la zone résultat pour le plus grand total possible.

Zone résultat inconnue sans longueur. ADD 2 TOTAL sur une zone jamais définie ni renseignée en longueur est refusé : QRG7030, « La zone ou l'indicateur n'est pas défini ».

En RPG ILE full free

En RPG ILE full free, l'addition est une expression d'affectation ; les zones se déclarent avec DCL-S.

dcl-s total packed(7:2);
total = 100;
total += 25.5;
total = prixht + tva;