Wednesday, December 15, 2010

Finding the factorial using a subroutine

       IDENTIFICATION DIVISION.
       PROGRAM-ID FACTFIND-MAIN.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       77 N PIC 99.
       77 FACT PIC 9(6).
       77 EDFACT PIC Z(5)9.
       PROCEDURE DIVISION.
       MAIN-PARA.
           DISPLAY "Enter a number : ".
           ACCEPT N.
           CALL "PRO0102.COB" USING N FACT.
           MOVE FACT TO EDFACT.
           DISPLAY "Factorial of " N "is: " EDFACT.
           STOP RUN.

Subroutine with file name PRO0102.COB
       IDENTIFICATION DIVISION.
       PROGRAM-ID FACTFIND-SUB.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       77 I PIC 99.
       LINKAGE SECTION.
       77 N1 PIC 9(2).
       77 FACT1 PIC 9(6).
       PROCEDURE DIVISION USING N1 FACT1.
       MAIN-PARA.
           MOVE 1 TO FACT1.
           PERFORM FIND VARYING I FROM 2 BY 1 UNTIL I > N1.
           EXIT PROGRAM.
       FIND.
           MULTIPLY I BY FACT1.

Matrix addition and subtraction

       IDENTIFICATION DIVISION.
       PROGRAM-ID.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 MATRIX.
         02 MAT OCCURS 10 TIMES.
           03 A PIC 9(4) OCCURS 10 TIMES.
           03 B PIC 9(4) OCCURS 10 TIMES.
           03 C PIC 9(4) OCCURS 10 TIMES.
           03 D PIC 9(4) OCCURS 10 TIMES.
       77 M PIC 9(3).
       77 N PIC 9(3).
       77 I PIC 9(3).
       77 J PIC 9(3).
       77 EMAT PIC -ZZZ9.
       PROCEDURE DIVISION.
       MAIN-PARA.
           DISPLAY "Enter the matrix dimensions".
           ACCEPT M.
           ACCEPT N.
           DISPLAY "Enter the fist matrix element".
           PERFORM READ-MAT1-PARA VARYING I FROM 1 BY 1 UNTIL I > M
                 AFTER J FROM 1 BY 1 UNTIL J > N.
           DISPLAY "Enter the second matrix element".
           PERFORM READ-MAT2-PARA VARYING I FROM 1 BY 1 UNTIL I > M
                 AFTER J FROM 1 BY 1 UNTIL J > N.
           DISPLAY (1 1) ERASE.
           PERFORM MAT-ADD-PARA VARYING I FROM 1 BY 1 UNTIL I > M
                 AFTER J FROM 1 BY 1 UNTIL J > N.
          PERFORM MAT-SUB-PARA VARYING I FROM 1 BY 1 UNTIL I > M
                 AFTER J FROM 1 BY 1 UNTIL J > N.
           PERFORM MAT-DIS-PARA VARYING I FROM 1 BY 1 UNTIL I > M
                 AFTER J FROM 1 BY 1 UNTIL J > N.
           STOP RUN.
       READ-MAT1-PARA.
           ACCEPT A(I J).
       READ-MAT2-PARA.
           ACCEPT B(I J).
       MAT-ADD-PARA.
           COMPUTE C(I J) = A(I J) + B(I J).
       MAT-SUB-PARA.
           COMPUTE D(I J) = A(I J) - B(I J).
       MAT-DIS-PARA.
           COMPUTE COL = J * 7 - 2.
           COMPUTE LIN = I + 4.
           MOVE A(I J) TO EMAT.
           DISPLAY (LIN, COL) EMAT.
           COMPUTE COL = J * 7 + 23.
           MOVE B(I J) TO EMAT.
           DISPLAY (LIN, COL) EMAT.
           COMPUTE COL = J * 7 - 2.
           COMPUTE LIN = I + 11.
           MOVE C(I J) TO EMAT.
           DISPLAY (LIN, COL) EMAT.
           COMPUTE COL = J * 7 + 23.
           MOVE D(I J) TO EMAT.
           DISPLAY (LIN, COL) EMAT.
         

Subroutine to recalculate the B-pay as per the following. If the jobcode is 1 then add 100. If it is 2 add 750 else add 500.

Identification Division.
       Program-ID.
       Environment Division.
       Data Division.
       Working-Storage Section.
       01  Emp-Data.
           02 Empno PIC X(6).
           02 Name PIC A(20).
           02 JobCode PIC 9.
           02 B-Pay PIC 9(6).
       77 BP-Plus-Bonus PIC 9(6).
       Procedure Division.
       Main-Para.
           Display "Enter Employee Number :".
           Accept Empno.
           Display "Enter Employee Name : ".
           Accept Name.
           Display "Enter Job Code (1/2/any): ".
           Accept JobCode.
           Display "Enter Basic Salary :".
           Accept B-Pay.
           CALL "PRO112.COB" USING B-Pay JobCode BP-Plus-Bonus.
           Display (1, 1) Erase.
           Display "Employee Number       : " Empno.
           Display "Employee Name         : " Name.
           Display "Employee Job Code     : " JobCode.
           Display "Employee Basic Salary : " B-Pay.
           Display "B-Pay with bonus      : " BP-Plus-Bonus.
           STOP RUN.

Subroutine file name : PRO112.COB

       Identification Division.
       Program-ID. BONUS-CAL.
       Environment Division.
       Data Division.
       LINKAGE SECTION.
       77 JOBCODE1 PIC 9.
       77 BPAY PIC 9(6).
       77 BONUS PIC 9(6).
       PROCEDURE DIVISION USING BPAY JOBCODE1 BONUS.
       MAIN-PARA.
           IF JOBCODE1 = 1
              ADD BPAY 1000 GIVING BONUS
           ELSE
              IF JOBCODE1 = 2
                 ADD BPAY 750 GIVING BONUS
              ELSE
                 ADD BPAY 500 GIVING BONUS.
           EXIT PROGRAM.