Transcript Document

COBOL for the 21st Century
11th edition
John Wiley & Sons, Inc.
Nancy Stern
Hofstra University
Robert A. Stern
Nassau Community College
James P. Ley
University of Wisconsin-Stout
(Emeritus)
7-1
Chapter Contents
•
•
•
•
Basic Arithmetic Verbs
Options Available with Arithmetic Verbs
COMPUTE Statement
Signed Numbers in Arithmetic
Operations
• Intrinsic Functions
7-2
Basic Arithmetic Verbs
• ADD, SUBTRACT, MULTIPLY, DIVIDE
• All require fields operated on to
– Have numeric PICTURE clauses
– Contain numeric data when statements
executed
7-3
ADD … TO Statement
Format 1
identifier-1
ADD
… TO identifier-2 ...
literal-1
• identifier-1 or literal-1 added to
identifier-2
• Result stored in identifier-2
7-4
ADD … TO Examples
Assume X, Y and Z are numeric fields
X = 5, Y = 3 and Z = 7
ADD Statement
Add X To Y
Add X, 9 To Y
Add X, 6, Y To Z
Result
Y=8
Y = 17
Z = 21
7-5
ADD … TO Statement
• Identifiers preceding TO are unchanged
• Value of identifier after TO
– Used in ADD operation
– Original value replaced with ADD result
7-6
ADD … GIVING Statement
Format 2
identifier-1
ADD
… GIVING identifier-2 ...
literal-1
• Identifiers and literals preceding
GIVING added together
• Result stored in identifier-2
7-7
ADD … GIVING Examples
Assume X, Y and Z are numeric fields
X = 5, Y = 3 and Z = 7
ADD Statement
Add X, Y Giving Z
Add X, 10 Giving Y
Add X, 4, Y Giving Z
Result
Z=8
Y = 15
Z = 12
7-8
ADD … GIVING Statement
• Identifiers preceding GIVING are
unchanged
• Value of identifier after GIVING
– Not part of ADD operation
– Original value replaced with ADD result
– May be report-item with edit symbols
7-9
ADD … GIVING Statement
• TO may be included before last
identifier or literal preceding GIVING
• For example: Add X, 4 To Y Giving Z
– Adds values of X, 4 and Y together
– Stores result in Z
7-10
ADD Statement
• Comma followed by one space may be
used to separate operands
• Result of ADD always placed in field(s)
after TO or GIVING
• Result field must be data-name, not a
literal
7-11
Producing More Than One Sum
• Several ADD operations can be done in
single statement
• Assume X, Y and Z are numeric fields
X = 5, Y = 3 and Z = 7
ADD Statement
Add X To Y, Z
Add X, 6 Giving Y, Z
Result
Y = 8, Z = 12
Y = 11, Z = 11
7-12
ADD … TO vs ADD … GIVING
• Use ADD … TO when original contents
of result operand
– Need to be included in operation
– But are not needed after operation
• Use ADD … GIVING when
– Original contents of all operands except
result field are to be retained
7-13
SUBTRACT Statement
Format 1
identifier-1
SUBTRACT
… FROM identifier-2 ...
literal-1
• identifier-1 or literal-1 subtracted from
identifier-2
• Result stored in identifier-2
7-14
SUBTRACT Examples
Assume A, B and C are numeric fields
A = 6, B = 2 and C = 18
SUBTRACT Statement
Subtract A From C
Subtract B, 5 From C
Subtract B From A, C
Result
C = 12
C = 11
A = 4, C = 16
7-15
SUBTRACT Statement Rules
• All identifiers and literals must be
numeric
• Data-name, not a literal, must follow
FROM
• All fields, literals preceding FROM
added together
• Sum subtracted from field after FROM
• Result stored in field after FROM
7-16
SUBTRACT … GIVING Statement
Format 2
identifier-1
SUBTRACT
… FROM
literal-1
identifier-2
literal-2
GIVING identifier-3 ...
• identifier-1 or literal-1 subtracted from
identifier-2 or literal-2
• Result stored in identifier-3
7-17
SUBTRACT … GIVING Examples
Assume A, B and C are numeric fields
A = 6, B = 2 and C = 18
SUBTRACT Statement
Subtract B From A Giving C
Subtract A From 15 Giving C
Subtract A, 4 From C Giving B
Result
C=4
C=9
B=8
7-18
SUBTRACT … GIVING Rules
• All identifiers, literals before FROM
must be numeric
• GIVING must be followed by data-name
– May be numeric or report-item
• All fields, literals preceding FROM
added together
• Sum subtracted from field after FROM
• Result stored in field after GIVING
7-19
MULTIPLY Statement
Format 1
identifier-1
MULTIPLY
BY identifier-2 ...
literal-1
• identifier-1 or literal-1 multiplied by
identifier-2
• Result stored in identifier-2
7-20
MULTIPLY Examples
Assume Q, R and S are numeric fields
Q = 4, R = 7 and S = 5
MULTIPLY Statement
Multiply Q By R
Multiply 10 By S
Multiply 2 By R, S
Result
R = 28
S = 50
R = 14, S = 10
7-21
MULTIPLY … GIVING Statement
Format 2
identifier-1
MULTIPLY
identifier-2
BY
literal-1
literal-2
GIVING identifier-3 ...
• identifier-1 or literal-1 multiplied by
identifier-2 or literal-2
• Result stored in identifier-3
7-22
MULTIPLY … GIVING Examples
Assume Q, R and S are numeric fields
Q = 4, R = 7 and S = 5
MULTIPLY Statement
Multiply Q By R Giving S
Multiply Q By 3 Giving S
Multiply 6 By Q Giving R, S
Result
S = 28
S = 12
R = 24
S = 24
7-23
MULTIPLY Statement
• Only two operands can be multiplied
• To obtain product of 3 operands
requires two instructions
To find Price x Qty x Discount
Multiply Price By Qty Giving WS-Amt
Multiply Discount By WS-Amt
7-24
DIVIDE Statement
Format 1
identifier-1
DIVIDE
INTO identifier-2 ...
literal-1
• identifier-1 or literal-1 divided into
identifier-2
• Result stored in identifier-2
7-25
DIVIDE Examples
Assume X, Y and Z are numeric fields
X = 2, Y = 12 and Z = 8
DIVIDE Statement
Divide X Into Y
Divide 3 Into Y
Divide 2 Into Y, Z
Result
Y=6
Y=4
Y = 6, Z = 4
7-26
DIVIDE … GIVING Statement
Format 2
DIVIDE
identifier-1
literal-1
INTO
BY
identifier-2
literal-2
GIVING identifier-3 ...
• identifier-1 or literal-1 divided into or by
identifier-2 or literal-2
• Result stored in identifier-3
7-27
DIVIDE … GIVING Examples
Assume X, Y and Z are numeric fields
X = 2, Y = 12 and Z = 8
DIVIDE Statement
Divide X Into Y Giving Z
Divide Y By X Giving Z
Divide 16 By Z Giving X, Y
Result
Z=6
Z=6
X=2
Y=2
7-28
REMAINDER Clause
• Optional clause with DIVIDE used to
store remainder of division
• Assume Q and R have PICTUREs of 99
Divide 70 By 15
Giving Q Remainder R
• Stores quotient 4 in Q and integer
remainder 10 in R
7-29
ROUNDED Option
• Arithmetic result truncated if room to
store all decimal positions not available
– Result of 3.89 stored in field with PIC 9V9
as 3^8
• Include ROUNDED to round result to
PICTURE specification
– Result of 3.89 stored as 3.9 if ROUNDED
option used
7-30
ROUNDED Option
Examples
01 Amt1
01 Amt2
Pic 9V99
Pic 999.
Value 2.25.
Arithmetic statement
Multiply .3 By Amt1
Multiply .3 By Amt1 Rounded
Divide 150 By 9
Giving Amt2 Rounded
Result
.675
.675
Value Stored
Amt1 = 0^67
Amt1 = 0^68
16.66… Amt2 = 017
7-31
Overflow or Size Error
• Occurs when result value too large to
be stored in result field
• Result of this ADD statement is 1,075
Add 350 To 725 Giving Num
• If Num has PICTURE of 999, only 3
digits can be stored
• High-order digits truncated so 075
stored in Num
7-32
Checking for Overflow
• Any arithmetic statement may include
one or both size error clauses
• ON SIZE ERROR statement(s)
– Specifies one or more statements to be
executed if overflow (size error) occurs
• NOT ON SIZE ERROR statement(s)
– Specifies one or more statements to be
executed if overflow (size error) does not
occur
7-33
SIZE ERROR Clause Example
Add X To Y Giving Z
On Size Error Display ' Result too large'
Not On Size Error Perform Calc-Para
End-Add
• If sum of X and Y too large to store in Z,
Display statement executed
• If Z large enough for result, Calc-Para is
performed
7-34
SIZE ERROR Clauses
• When using one or both clauses, use
scope terminator to end arithmetic
operation
– END-ADD, END-SUBTRACT
– END-MULTIPLY, END-DIVIDE
7-35
Size of Receiving Fields
• Ensure receiving field has PICTURE
large enough to store result
• Addition - define resultant field one
position larger than largest field added
• Subtraction - define resultant field as
large as number being subtracted from
– Assumes positive numbers
– Assumes smaller subtracted from larger
number
7-36
Size of Receiving Fields
• Multiplication - define resultant field
equal to sum of lengths of operands
begin multiplied
• Division - define resultant field equal to
sum of number of digits in divisor and
dividend
7-37
COMPUTE Statement
• General arithmetic statement using
symbols in place of arithmetic verbs
Symbol
Verb
+
ADD
SUBTRACT
*
MULTIPLY
/
DIVIDE
**
exponentiation
7-38
COMPUTE Statement
Format
COMPUTE identifier-1 … =
arithmetic-exp-1
literal-1
identifier-2
• Identifier to left of equal sign set to value
of arithmetic-expression, literal or
identifier on right of equal sign
7-39
COMPUTE Examples
Assume X, Y and Z are numeric fields
X = 9, Y = 4 and Z = 12
COMPUTE Statement
Compute Z = X * Y
Compute X = Z - Y + 2
Compute X = Y
Compute Z = Y ** 2
Result
Z = 36
X = 10
X=4
Z = 16
7-40
Order of Evaluation
• Arithmetic expression may include any
combination of symbols +, -, *, / or **
• Order of operations
1.
2.
3.
4.
**
* or /
+ or ()
all exponentiation performed first
in order or appearance left to right
in order or appearance left to right
override rules 1-3, all operations
in ( ) performed first
7-41
COMPUTE Examples
Assume X, Y and Z are numeric fields
X = 6, Y = 18 and Z = 5
COMPUTE Statement
Compute Z = Y / X + 3
Compute Z = Y / (X + 3)
Compute Y = Z + X * 10
Compute Y = Z * X / 10
Result
Z=6
Z=2
Y = 65
Y=3
7-42
COMPUTE Statement
• COMPUTE can include same optional
clauses used with other arithmetic verbs
• ROUNDED follows result field (identifier
preceding equal sign)
• If ON SIZE ERROR or NOT ON SIZE
ERROR clauses used, include scope
terminator END-COMPUTE
7-43
Signed Numbers
• Use S in PIC clause of result field if
– Numbers used in calculation may be
negative
– Calculation may produce negative results
• PIC clause without S assumed to be
unsigned
– If negative result stored in unsigned field,
sign not retained
7-44
Intrinsic Functions
• Built-in procedures to perform particular
task like
– Find square root of number
– Convert letters to uppercase
– Get current date
• Approved as extensions to COBOL
standard in 1989
• Now included in many compilers
7-45
Intrinsic Functions
Example
Find square root of X and place result in Y
Compute Y = Function Sqrt(X)
• Value of X passed to function called
Sqrt
• Code in function finds square root of X
• Result returned by Sqrt assigned to Y
7-46
Intrinsic Functions
Example
Convert More-Data to uppercase
Move Function Upper-Case(More-Data)
To Up-More-Data
• If More-Data = "Yes", function UpperCase returns value "YES"
• Value "YES" moved to Up-More-Data
7-47
Intrinsic Functions
Format
FUNCTION function-name (argument)
• Argument - input to function
– May be numeric or alpha-numeric
depending on function
– Functions may have 0, 1 or more
7-48
Intrinsic Functions
• Output of function - result returned after
function performs its task
• Function returning alphanumeric result
used in statements using alphanumeric
data-items
• Function returning numeric result can
be used only in arithmetic expressions
7-49
Chapter Summary
• ADD, SUBTRACT, MULTIPLY, and
DIVIDE verbs
– format without GIVING
• Receiving field is part of arithmetic
• May not be report-item
– with GIVING format
• Receiving field is not part of arithmetic
• May be report-item
7-50
Chapter Summary
• COMPUTE used for any combination of
arithmetic operations
• Order of evaluation of operators
1.
2.
3.
4.
**
* or / in sequence left to right
+ or - in sequence left to right
( ) override normal hierarchy rules
7-51
Chapter Summary
• ROUNDED can follow receiving field in
any arithmetic verb
• ON SIZE ERROR, NOT ON SIZE
ERROR
– Can be used with any arithmetic verb
– Include scope terminator (e.g., END-ADD)
7-52
Copyright © John Wiley & Sons, Inc. All rights reserved. Reproduction or
translation of this work beyond that permitted in Section 117 of the 1976
United States Copyright Act without the express written permission of the
copyright owner is unlawful. Request for further information should be
addressed to the Permissions Department, John Wiley & Sons, Inc. The
purchaser may make back-up copies for his/her own use only and not for
distribution or resale. The Publisher assumes no responsibility for errors,
omissions, or damages, caused by the use of these programs or from the
use of the information contained herein.
7-53