Dieser Abschnitt behandelt folgende Themen:
Verwandte Statements: COMPRESS | COMPUTE | DIVIDE | EXAMINE | MOVE
| MOVE ALL | MULTIPLY | RESET | SEPARATE | SUBTRACT
Gehört zur Funktionsgruppe: Arithmetische Funktionen und Datenzuweisungen
Das ADD-Statement wird benutzt, um zwei oder mehr Operanden zu addieren.
Dieses Statement hat zwei verschiedene Syntax-Strukturen.
Anmerkungen:
ADD-Statement
ausgeführt wird, muss jeder bei der arithmetischen Operation benutzte Operand einen
gültigen Wert enthalten.
ADD
[ROUNDED]
|
|
|
TO
operand2 |
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Operanden-Definitionstabelle (Syntax 1):
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| operand1 | C | S | A | N | N | P | I | F | D | T | ja | nein | |||||||||
| operand2 | S | A | M | N | P | I | F | D | T | ja | ja | ||||||||||
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung |
|---|---|
arithmetic-expression |
Siehe Arithmetischer Ausdruck beim
COMPUTE-Statement.
|
operand1 TO operand2
|
Operanden:
operand2 := operand2 + operand1 + ... |
ROUNDED |
ROUNDED-Option:
Wird das Schlüsselwort Weitere Informationen siehe Abschneiden und Runden von Feldwerten im Abschnitt Regeln für arithmetische Operationen im Leitfaden zur Programmierung. |
Beispiel:
Das Statement
ADD #A(*) TO #B(*)ist gleichbedeutend mitCOMPUTE #B(*) := #A(*) + #B(*)ADD #S TO #Rist gleichbedeutend mitCOMPUTE #R := #S + #RADD #S #T TO #Rist gleichbedeutend mitCOMPUTE #R := #S + #T + #RADD #A(*) TO #Rist gleichbedeutend mitCOMPUTE #R := #A(*) + #R
ADD
[ROUNDED]
|
|
|
GIVING
operand2 |
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Operanden-Definitionstabelle (Syntax 2):
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| operand1 | C | S | A | N | N | P | I | F | D | T | ja | nein | ||||||||
| operand2 | S | A | M | A | U | N | P | I | F | B* | D | T | ja | ja | ||||||
* Format B von operand3 kann nur mit einer Länge von kleiner gleich 4 verwendet werden.
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung: |
|---|---|
arithmetic-expression |
Siehe Arithmetischer Ausdruck beim
COMPUTE-Statement.
|
operand1
GIVING operand2 |
Operands:
operand2 := operand1 + ... |
ROUNDED |
ROUNDED-Option:
Wenn das Schlüsselwort Weitere Informationen siehe Abschneiden und Runden von Feldwerten im Abschnitt Regeln für arithmetische Operationen im Leitfaden zur Programmierung. |
Anmerkung
Bei Verwendung von Syntax 2 gilt Folgendes: Das Feld bzw. die Felder
(operand1) links vom Schlüsselwort GIVING sind
die Terme der Addition, das Feld rechts von GIVING
(operand2) wird nur zum Empfang des Ergebnisses genutzt. Wird
nur ein einzelnes Feld (operand1) geliefert, dann wird aus der
ADD-Operation in eine Zuweisung.
Beispiel:
Das Statement
ADD #S GIVING #Rist gleichbedeutend mitCOMPUTE #R := #SADD #S #T GIVING #Rist gleichbedeutend mitCOMPUTE #R := #S + #TADD #A(*) 0 GIVING #Rist gleichbedeutend mitCOMPUTE #R := #A(*) + 0Dies ist eine zulässige Operation aufgrund der Regeln im Abschnitt Arithmetische Operationen mit ArraysADD #A(*) GIVING #Rist gleichbedeutend mitCOMPUTE #R := #A(*)Dies ist eine unzulässige Operation aufgrund der Regeln im Abschnitt Zuweisungen bei Arrays
** Example 'ADDEX1': ADD
************************************************************************
DEFINE DATA LOCAL
1 #A (P2)
1 #B (P1.1)
1 #C (P1)
1 #DATE (D)
1 #ARRAY1 (P5/1:4,1:4) INIT (2,*) <5>
1 #ARRAY2 (P5/1:4,1:4) INIT (4,*) <10>
END-DEFINE
*
ADD +5 -2 -1 GIVING #A
WRITE NOTITLE 'ADD +5 -2 -1 GIVING #A' 15X '=' #A
*
ADD .231 3.6 GIVING #B
WRITE / 'ADD .231 3.6 GIVING #B' 15X '=' #B
*
ADD ROUNDED 2.9 3.8 GIVING #C
WRITE / 'ADD ROUNDED 2.9 3.8 GIVING #C' 8X '=' #C
*
MOVE *DATX TO #DATE
ADD 7 TO #DATE
WRITE / 'CURRENT DATE:' *DATX (DF=L) 13X
'CURRENT DATE + 7:' #DATE (DF=L)
*
WRITE / '#ARRAY1 AND #ARRAY2 BEFORE ADDITION'
/ '=' #ARRAY1 (2,*) '=' #ARRAY2 (4,*)
ADD #ARRAY1 (2,*) TO #ARRAY2 (4,*)
WRITE / '#ARRAY1 AND #ARRAY2 AFTER ADDITION'
/ '=' #ARRAY1 (2,*) '=' #ARRAY2 (4,*)
*
END
Ausgabe des Programms ADDEX1:
ADD +5 -2 -1 GIVING #A #A: 2
ADD .231 3.6 GIVING #B #B: 3.8
ADD ROUNDED 2.9 3.8 GIVING #C #C: 7
CURRENT DATE: 2005-01-10 CURRENT DATE + 7: 2005-01-17
#ARRAY1 AND #ARRAY2 BEFORE ADDITION
#ARRAY1: 5 5 5 5 #ARRAY2: 10 10 10 10
#ARRAY1 AND #ARRAY2 AFTER ADDITION
#ARRAY1: 5 5 5 5 #ARRAY2: 15 15 15 15