modifications to program addda.cbl please use speaker notes for additional information!
TRANSCRIPT
IDENTIFICATION DIVISION. PROGRAM-ID. ADDPROG. AUTHOR. GROCER. *ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 INPUT-AREA. 05 GET-ACCEPT-ANS PIC X VALUE SPACES. 05 FIRST-NUMBER PIC 999 VALUE 0. 05 SECOND-NUMBER PIC 999 VALUE 0. 05 ADD-ANS PIC 9999 VALUE 0. PROCEDURE DIVISION. MAINLINE. DISPLAY "ENTER THE FIRST NUMBER (UNDER 1000)". ACCEPT FIRST-NUMBER. DISPLAY "ENTER THE SECOND NUMBER (UNDER 1000)". ACCEPT SECOND-NUMBER. ADD FIRST-NUMBER TO SECOND-NUMBER GIVING ADD-ANS. * ADD FIRST-NUMBER SECOND-NUMBER * GIVING ADD-ANS. * ADD FIRST-NUMBER, SECOND-NUMBER * GIVING ADD-ANS. DISPLAY "THE ANSWER IS " ADD-ANS. DISPLAY "PRESS ENTER TO END THE PROGRAM". ACCEPT GET-ACCEPT-ANS. STOP RUN.
ADDDA.CBLADDDA.CBL
Two other ways that the ADD statement could have been written - shown as comments.
ADDDA1.CBLADDDA1.CBL
IDENTIFICATION DIVISION. PROGRAM-ID. ADDPROG. AUTHOR. GROCER. *ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 INPUT-AREA. 05 GET-ACCEPT-ANS PIC X VALUE SPACES. 05 FIRST-NUMBER PIC 999 VALUE 0. 05 SECOND-NUMBER PIC 999 VALUE 0. 05 ADD-ANS PIC 9999 VALUE 0. PROCEDURE DIVISION. MAINLINE. DISPLAY "ENTER THE FIRST NUMBER (UNDER 1000)". ACCEPT FIRST-NUMBER. DISPLAY "ENTER THE SECOND NUMBER (UNDER 1000)". ACCEPT SECOND-NUMBER. COMPUTE ADD-ANS = FIRST-NUMBER + SECOND-NUMBER. DISPLAY "THE ANSWER IS " ADD-ANS. DISPLAY "PRESS ENTER TO END THE PROGRAM". ACCEPT GET-ACCEPT-ANS. STOP RUN.
The COMPUTE statement is an alternate way to do mathematics. In this example I am saying COMPUTE ADD-ANS = to the sum of the data in FIRST-NUMBER and the data in SECOND-NUMBER.
IDENTIFICATION DIVISION. PROGRAM-ID. ADDPROG. AUTHOR. GROCER. *ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 INPUT-AREA. 05 GET-ACCEPT-ANS PIC X VALUE SPACES. 05 FIRST-NUMBER PIC 999 VALUE 0. 05 SECOND-NUMBER PIC 999 VALUE 0. 05 ADD-ANS PIC 9999 VALUE 0. PROCEDURE DIVISION. MAINLINE. DISPLAY "ENTER THE FIRST NUMBER (UNDER 1000)". ACCEPT FIRST-NUMBER. DISPLAY "ENTER THE SECOND NUMBER (UNDER 1000)". ACCEPT SECOND-NUMBER. COMPUTE ADD-ANS = FIRST-NUMBER + SECOND-NUMBER * 2. DISPLAY "THE ANSWER IS " ADD-ANS. DISPLAY "PRESS ENTER TO END THE PROGRAM". ACCEPT GET-ACCEPT-ANS. STOP RUN.
ADDDA1A.CBLADDDA1A.CBL
Order of Operation:Order of Operation:
•Works from left to right
•Resolves parenthesis first
•Order of mathematics:
•Exponentiation
•Multiplication or Division
•Addition or Subtraction
Order of OperationOrder of Operation
ADDDA1A.INTADDDA1A.INT
COMPUTE ADD-ANS = FIRST-NUMBER + SECOND-NUMBER * 2. = 5 + 6 * 2 = 5 + 12 = 0017
IDENTIFICATION DIVISION. PROGRAM-ID. ADDPROG. AUTHOR. GROCER. *ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 INPUT-AREA. 05 GET-ACCEPT-ANS PIC X VALUE SPACES. 05 FIRST-NUMBER PIC 999 VALUE 0. 05 SECOND-NUMBER PIC 999 VALUE 0. 05 ADD-ANS PIC 9999 VALUE 0. PROCEDURE DIVISION. MAINLINE. DISPLAY "ENTER THE FIRST NUMBER (UNDER 1000)". ACCEPT FIRST-NUMBER. DISPLAY "ENTER THE SECOND NUMBER (UNDER 1000)". ACCEPT SECOND-NUMBER. COMPUTE ADD-ANS = (FIRST-NUMBER + SECOND-NUMBER) * 2. DISPLAY "THE ANSWER IS " ADD-ANS. DISPLAY "PRESS ENTER TO END THE PROGRAM". ACCEPT GET-ACCEPT-ANS. STOP RUN.
ADDDA1B.CBLADDDA1B.CBL
ADDDA1B.INTADDDA1B.INT
COMPUTE ADD-ANS = (FIRST-NUMBER + SECOND-NUMBER) * 2.
= ( 5 + 6 ) * 2
= 11 * 2
= 0022
IDENTIFICATION DIVISION. PROGRAM-ID. ADDPROG. AUTHOR. GROCER. *ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 INPUT-AREA. 05 GET-ACCEPT-ANS PIC X VALUE SPACES. 05 FIRST-NUMBER PIC 999 VALUE 0. 05 SECOND-NUMBER PIC 999 VALUE 0. 05 ADD-ANS PIC 9999 VALUE 0. 05 FINAL-ANS PIC 9999 VALUE 0. PROCEDURE DIVISION. MAINLINE. DISPLAY "ENTER THE FIRST NUMBER (UNDER 1000)". ACCEPT FIRST-NUMBER. DISPLAY "ENTER THE SECOND NUMBER (UNDER 1000)". ACCEPT SECOND-NUMBER. ADD FIRST-NUMBER SECOND-NUMBER GIVING ADD-ANS. MULTIPLY ADD-ANS BY 2 GIVING FINAL-ANS. DISPLAY "THE ANSWER IS " ADD-ANS " " FINAL-ANS. DISPLAY "PRESS ENTER TO END THE PROGRAM". ACCEPT GET-ACCEPT-ANS. STOP RUN.
ADDDA2.CBLADDDA2.CBL
ADDDA2.INTADDDA2.INT
ADD FIRST-NUMBER SECOND-NUMBER GIVING ADD-ANS. 12 + 17 = 29
MULTIPLY ADD-ANS BY 2 GIVING FINAL-ANS.
29 * 2 = 58
IDENTIFICATION DIVISION. PROGRAM-ID. ADDPROG. AUTHOR. GROCER. *ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 INPUT-AREA. 05 GET-ACCEPT-ANS PIC X VALUE SPACES. 05 FIRST-NUMBER PIC 999 VALUE 0. 05 SECOND-NUMBER PIC 999 VALUE 0. 01 OUTPUT-AREA. 05 ADD-ANS PIC 9999 VALUE 0. 05 FINAL-ANS PIC 9999 VALUE 0. PROCEDURE DIVISION. MAINLINE. DISPLAY "ENTER THE FIRST NUMBER (UNDER 1000)". ACCEPT FIRST-NUMBER. DISPLAY "ENTER THE SECOND NUMBER (UNDER 1000)". ACCEPT SECOND-NUMBER. ADD FIRST-NUMBER SECOND-NUMBER GIVING ADD-ANS. MULTIPLY ADD-ANS BY 2 GIVING FINAL-ANS. DISPLAY "THE ANSWER IS " ADD-ANS " " FINAL-ANS. DISPLAY "PRESS ENTER TO END THE PROGRAM". ACCEPT GET-ACCEPT-ANS. STOP RUN.
ADDDA2A.CBLADDDA2A.CBL
This more accurately shows how the data is actually being used.
ADDDA3.CBLADDDA3.CBL
This is where I am storing the output, I have edited it so that a comma will be inserted if needed and so the Zs will suppress leading zeros. Notice that edited data does not have a value!
The results of the calculations are being stored in ADD-ANS-WS and FINAL-ANS-WS. Note, the data is being stored in a pure numeric field without editing characters. When I am ready to display the data, I move it to the output areas(ADD-ANS-OUT and FINAL-ANS-OUT) that contain the editing characters and then display the output areas.
ADDDA3.INTADDDA3.INT
The PIC Z,ZZ9 suppresses leading zeros so you now see the answers as 11 and 22.
Note that there is a 9 in the units position, so if the answer was 0, the single 0 would print since the units position is not suppressed.
The PIC Z,ZZ9 inserts the comma in the answers shown.
ADDDA4.CBLADDDA4.CBL
The pictures have now been defined so they can hold decimal numbers, not just whole numbers. The V is an assumed decimal point that essentially says assume that the decimal point is here when you do your calculations.
The user wants to see an actual decimal point, so in the output pictures where I have done my editing, I use the actual decimal point.
ADDDA5.CBLADDDA5.CBL
S is used with the pictures where the answer is being stored. S remembers the sign.
The actual sign is used in the output picture so the user can tell if the data is negative. Note that in one case the negative sign is in front of the data and in one case it is after the data.
ADDDA5.INTADDDA5.INT
In the first example, the subtraction did not result in a negative answer so the negative sign in the output pictures turned to a space.
In the second example, the answer was negative. The S remembered that it had a negative answer and the sign in the output picture showed the sign.