DIVIDE

Dieses Dokument behandelt folgende Themen:

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

Gehört zur Funktionsgruppe: Arithmetische Funktionen und Datenzuweisungen


Funktion

Mit dem Statement DIVIDE können Sie einen Operanden durch einen anderen dividieren.

Division durch Null:

Wird eine Division durch Null (0) versucht, d.h. wenn der Divisor (operand1), also die Zahl durch die geteilt wird, 0 ist, wird entweder eine entsprechende Fehlermeldung oder als Ergebnis 0 ausgegeben, je nachdem wie der Session-Parameter ZD (der in der Parameter-Referenz-Dokumentation beschrieben ist) gesetzt ist.

Dieses Statement hat drei verschiedene Syntax-Strukturen.

Syntax 1 — DIVIDE-Statement ohne GIVING-Klausel

DIVIDE [ROUNDED]

../graphics/cbo2.gif

(arithmetic-expression)
operand1

../graphics/cbc2.gif

INTO operand2

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand1 C S A   N   N P I F               yes no
operand2   S A   M   N P I F               yes no

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Syntax-Element-Beschreibung:

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

operand1 ist der Divisor, operand2 ist der Dividend. Das Ergebnis wird in operand2 (Ergebnisfeld) gespeichert. Somit ist das Statement gleichbedeutend mit:

operand2 := operand2 / operand1

Wenn ein arithmetischer Ausdruck benutzt wird, darf operand2 kein Array-Bereich sein.

Die Anzahl der Dezimalstellen für das Ergebnis der Division wird vom Ergebnisfeld (d.h. operand2) ausgewertet.

Weitere Informationen siehe Genauigkeit von Ergebnissen bei arithmetischen Operationen im Abschnitt Regeln für arithmetische Operationen im Leitfaden zur Programmierung.

ROUNDED
ROUNDED-Option:

Wird das Schlüsselwort ROUNDED angegeben, dann wird das Ergebnis gerundet.

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

Syntax 2 — DIVIDE-Statement mit GIVING-Klausel

DIVIDE [ROUNDED]

../graphics/cbo2.gif

(arithmetic-expression)
operand1

../graphics/cbc2.gif

INTO

../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:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand1 C S A   N     N P I F               yes no
operand2 C S A   N     N P I F               yes no
operand3   S A     A U N P I F B*             yes yes

* 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 INTO operand2 GIVING operand3
Operanden:

operand1 ist der Divisor, operand2 ist der Dividend.

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

operand3 := operand2 / operand1

Die Anzahl der Dezimalstellen für das Ergebnis der Division wird vom Ergebnisfeld (d.h. operand3) ausgewertet.

Weitere Informationen siehe Genauigkeit von Ergebnissen bei arithmetischen Operationen im Abschnitt Regeln für arithmetische Operationen im Leitfaden zur Programmierung.

ROUNDED
ROUNDED-Option:

Wird das Schlüsselwort ROUNDED angegeben, dann wird das Ergebnis gerundet.

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

Syntax 3 — DIVIDE-Statement mit REMAINDER-Klausel

DIVIDE

../graphics/cbo2.gif

(arithmetic-expression)
operand1

../graphics/cbc2.gif

INTO

../graphics/cbo2.gif

(arithmetic-expression)
operand2

../graphics/cbc2.gif

[GIVING operand3] REMAINDER operand4

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand1 C S A   N     N P I                 yes no
operand2 C S A   N     N P I                 yes no
operand3   S A     A U N P I F B*    T         yes yes
operand4   S A     A U N P I F B*    T         yes yes

* Format B von operand3 und operand4 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
operand2

Operanden:

operand1 ist der Divisor, operand2 ist der Dividend.

Wird die GIVING-Klausel nicht benutzt, wird das Ergebnis in operand2 gespeichert.

Das Ergebnisfeld kann ein Datenbankfeld oder eine Benutzervariable sein.

Falls operand2 eine Konstante oder eine nicht änderbare Natural-Systemvariable ist, dann ist die GIVING-Klausel erforderlich.

GIVING operand3
GIVING-Klausel:

Wird diese Klausel benutzt, dann wird operand2 nicht verändert, und das Ergebnis wird in operand3 gespeichert.

Die Anzahl der Dezimalstellen für das Ergebnis der Division wird vom Ergebnisfeld (d.h. operand2, falls keine GIVING-Klausel benutzt wird, oder operand3, falls die GIVING-Klausel benutzt wird) ausgewertet.

Weitere Informationen siehe Genauigkeit von Ergebnissen bei arithmetischen Operationen im Abschnitt Regeln für arithmetische Operationen im Leitfaden zur Programmierung.

REMAINDER operand4
REMAINDER-Klausel:

Der nach der Division verbleibende Rest wird in das in operand4 angegebene Feld gestellt.

  • Wenn die GIVING-Klausel benutzt wird, ist das Statement gleichbedeutend mit:

    operand3 := operand2 / operand1
    operand4 := operand2 - (operand3 * operand1)

    Keiner der vier Operanden darf ein Array-Bereich sein.

  • Wenn die GIVING-Klausel nicht benutzt wird, ist das Statement gleichbedeutend mit:

    temporary := operand2
    operand2 := operand2 / operand1
    operand4 := temporary - (operand2 * operand1)

    dabei ist temporary ein temporäres Feld mit Format/Länge wie bei operand2.

Für jeden dieser Schritte gelten die unter Genauigkeit von Ergebnissen bei arithmetischen Operationen im Abschnitt Regeln für arithmetische Operationen im Leitfaden zur Programmierung beschriebenen Regeln.

Beispiel

** Example 'DIVEX1': DIVIDE                                             
************************************************************************
DEFINE DATA LOCAL                                                       
1 #A (N7) INIT <20>                                                     
1 #B (N7)                                                               
1 #C (N3.2)                                                             
1 #D (N1)                                                               
1 #E (N1) INIT <3>                                                      
1 #F (N1)                                                               
END-DEFINE                                                              
*                                                                       
DIVIDE 5 INTO #A                                                      
WRITE NOTITLE 'DIVIDE 5 INTO #A' 20X '=' #A                             
*                                                                       
RESET INITIAL #A                                                        
DIVIDE 5 INTO #A GIVING #B                                          
WRITE 'DIVIDE 5 INTO #A GIVING #B' 10X '=' #B                           
*                                                                       
DIVIDE 3 INTO 3.10 GIVING #C
WRITE 'DIVIDE 3 INTO 3.10 GIVING #C' 8X '=' #C        
*                                                     
DIVIDE 3 INTO 3.1 GIVING #D                     
WRITE 'DIVIDE 3 INTO 3.1 GIVING #D' 9X '=' #D         
*                                                     
DIVIDE 2 INTO #E REMAINDER #F                    
WRITE 'DIVIDE 2 INTO #E REMAINDER #F' 7X '=' #E '=' #F
*                                                     
END

Ausgabe des Programms DIVEX1:

DIVIDE 5 INTO #A                    #A:        4 
DIVIDE 5 INTO #A GIVING #B          #B:        4 
DIVIDE 3 INTO 3.10 GIVING #C        #C:    1.03  
DIVIDE 3 INTO 3.1 GIVING #D         #D:  1       
DIVIDE 2 INTO #E REMAINDER #F       #E:  1 #F:  1