MULTIPLY

Dieses Dokument behandelt folgende Themen:

Verwandte Statements: ADD | COMPRESS | COMPUTE | DIVIDE | EXAMINE | MOVE | MOVE ALL | RESET | SEPARATE | SUBTRACT

Gehört zur Funktionsgruppe: Arithmetische Funktionen und Datenzuweisungen


Funktion

Das Statement MULTIPLY dient dazu, zwei Operanden miteinander zu multiplizieren. Das Ergebnis der Multiplikation kann, je nach verwendeter Syntax, entweder in operand1 oder in operand3 gespeichert werden.

Wird ein Datenbankfeld als Ergebnisfeld verwendet, so ändert sich durch die Multiplikation nur der programmintern benutzte Wert des Feldes. Der in der Datenbank gespeicherte Feldwert wird davon nicht beeinflusst.

Bezüglich Multiplikationen mit Arrays siehe auch Arithmetische Operationen mit Arrays im Leitfaden zur Programmierung.

Dieses Statement hat zwei verschiedene Syntax-Strukturen.

Syntax 1 — MULTIPLY-Statement ohne GIVING-Klausel

Wenn Syntax 1 benutzt wird, kann das Ergebnis der Multiplikation in operand1 gespeichert werden.

MULTIPLY [ROUNDED] operand1 BY

../graphics/cbo2.gif

(arithmetic-expression)
operand2

../graphics/cbc2.gif

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   S A   M   N P I F               ja nein
operand2 C S A   N   N P I F               ja nein

Syntax-Element-Beschreibung (Syntax 1):

Syntax-Element Beschreibung
arithmetic-expression Siehe Arithmetischer Ausdruck beim COMPUTE-Statement.
operand1 BY operand2
Operanden:

operand1 ist der Multiplikand, operand2 ist der Multiplikator.

Das Ergebnis wird in operand1 gespeichert. Somit ist das Statement gleichbedeutend mit:

operand1 := operand1 * operand2
ROUNDED
ROUNDED-Option:

Wird das Schlüsselwort ROUNDED angegeben, dann wird das Ergebnis gerundet, bevor es operand1 oder operand3 zugewiesen wird.

Weitere Informationen siehe Abschneiden und Runden von Feldwerten im Abschnitt Regeln für arithmetische Operationen im Leitfaden zur Programmierung.

Syntax 2 — MULTIPLY-Statement mit GIVING-Klausel

Wenn Syntax 2 benutzt wird, kann das Ergebnis der Multiplikation in operand3 gespeichert werden.

MULTIPLY [ROUNDED]

../graphics/cbo2.gif

(arithmetic-expression)
operand1

../graphics/cbc2.gif

BY

../graphics/cbo2.gif

(arithmetic-expression)
operand2

../graphics/cbc2.gif

GIVING operand3

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   M     N P I F               ja nein
operand2 C S A   N     N P I F               ja nein
operand3   S A   M A U N P I F B*    T         ja ja

* Format B von operand3 kann nur mit einer Länge von kleiner gleich 4 verwendet werden.

Syntax-Element-Beschreibung (Syntax 2):

Syntax-Element Beschreibung
arithmetic-expression Siehe Arithmetischer Ausdruck beim COMPUTE-Statement.
operand1 BY operand2 GIVING operand3
Operanden:

operand1 ist der Multiplikand, operand2 ist der Multiplikator.

Das Ergebnis wird in operand3 gespeichert. Somit ist das Statement gleichbedeutend mit:

operand3 := operand1 * operand2
ROUNDED
ROUNDED-Option:

Wird das Schlüsselwort ROUNDED angegeben, dann wird das Ergebnis gerundet, bevor es operand1 oder operand3 zugewiesen wird.

Weitere Informationen siehe Abschneiden und Runden von Feldwerten im Abschnitt Regeln für arithmetische Operationen im Leitfaden zur Programmierung.

Beispiel

** Example 'MULEX1': MULTIPLY                                           
************************************************************************
DEFINE DATA LOCAL                                                       
1 #A      (N3) INIT <20>                                                
1 #B      (N5)                                                          
1 #C      (N3.1)                                                        
1 #D      (N2)                                                          
1 #ARRAY1 (N5/1:4,1:4) INIT (2,*) <5>                                   
1 #ARRAY2 (N5/1:4,1:4) INIT (4,*) <10>                                  
END-DEFINE                                                              
*                                                                       
MULTIPLY #A BY 3                                            
WRITE NOTITLE 'MULTIPLY #A BY 3'            25X '=' #A                  
*                                                                       
MULTIPLY #A BY 3 GIVING #B                                      
WRITE 'MULTIPLY #A BY 3 GIVING #B'          15X '=' #B                  
*                                                                       
MULTIPLY ROUNDED 3 BY 3.5 GIVING #C                       
WRITE 'MULTIPLY ROUNDED 3 BY 3.5 GIVING #C'  6X '=' #C                  
*                                                     
MULTIPLY 3 BY -4 GIVING #D                    
WRITE 'MULTIPLY  3 BY -4 GIVING #D'         14X '=' #D
*                                                     
MULTIPLY -3 BY -4 GIVING #D                 
WRITE 'MULTIPLY -3 BY -4 GIVING #D'         14X '=' #D
*                                                     
MULTIPLY  3 BY  0 GIVING #D                   
WRITE 'MULTIPLY  3 BY  0 GIVING #D'         14X '=' #D
*                                                     
WRITE / '=' #ARRAY1 (2,*) '=' #ARRAY2 (4,*)           
MULTIPLY #ARRAY1 (2,*) BY #ARRAY2 (4,*)      
WRITE / 'MULTIPLY #ARRAY1 (2,*) BY #ARRAY2 (4,*)'     
      / '=' #ARRAY1 (2,*) '=' #ARRAY2 (4,*)           
*                                                     
END

Ausgabe des Programms MULEX1:

MULTIPLY #A BY 3                         #A:   60                        
MULTIPLY #A BY 3 GIVING #B               #B:    180                      
MULTIPLY ROUNDED 3 BY 3.5 GIVING #C      #C:   10.5                      
MULTIPLY  3 BY -4 GIVING #D              #D: -12                         
MULTIPLY -3 BY -4 GIVING #D              #D:  12                         
MULTIPLY  3 BY  0 GIVING #D              #D:   0                         
                                                                         
#ARRAY1:      5      5      5      5 #ARRAY2:     10     10     10     10
                                                                         
MULTIPLY #ARRAY1 (2,*) BY #ARRAY2 (4,*)                                  
#ARRAY1:     50     50     50     50 #ARRAY2:     10     10     10     10