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
Hdemande 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). SansH, 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;