*MULTIPLY TWO 3X3 MATRICES * MADE BY GAURANG * VISIT : gaurang85.tripod.com IDENTIFICATION DIVISION. PROGRAM-ID. MATRIX. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL SELECT MAT-FILE ASSIGN TO DISK ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD MAT-FILE LABEL RECORDS ARE STANDARD VALUE OF FILE-ID IS "MAT.DAT". 01 MATRIX. 02 ROW OCCURS 3 TIMES. 03 COLM OCCURS 3 TIMES. 04 MAT1 PIC 99. 04 MAT2 PIC 99. 04 MAT3 PIC 999. WORKING-STORAGE SECTION. 01 MATRIX1. 02 ROW OCCURS 3 TIMES. 03 COLM OCCURS 3 TIMES. 04 MAT11 PIC 99. 04 MAT12 PIC 99. 04 MAT13 PIC 999. 01 TEMP1 PIC 99. 01 TEMP2 PIC 99. 01 TEMP3 PIC 999. 01 TEMP PIC 999. 01 DUMMY PIC X. 01 I PIC 9. 01 J PIC 9. 01 K PIC 9. 01 FLAG PIC 9. 77 FILE-END PIC X. SCREEN SECTION. 01 TITL. 02 LINE 5 COLUMN 25 " 3*3 MATRIX MULTIPLICATION " HIGHLIGHT BLINK BACKGROUND-COLOR 9 FOREGROUND-COLOR 3. 01 DISP-MAT1. 02 LINE 7 COLUMN 1 "ENTER MATRIX 1 : " HIGHLIGHT FOREGROUND-COLOR 7. 01 DISP-MAT2. 02 LINE 11 COLUMN 1 "ENTER MATRIX : " HIGHLIGHT FOREGROUND-COLOR 7. 01 MAT-RES. 02 LINE 16 COLUMN 1 "RESULTANT MATIX IS : " HIGHLIGHT FOREGROUND-COLOR 3. PROCEDURE DIVISION. PROGRAM-BEGIN. OPEN EXTEND MAT-FILE. PERFORM GET-MATRICES. PERFORM CALC-RESULT. WRITE MATRIX. CLOSE MAT-FILE. IF DUMMY = "Y" OR "y" PERFORM READ-REC. GO TO TO-CONTINUE. PROGRAM-DONE. STOP RUN. GET-MATRICES. DISPLAY (1, 1) ERASE. DISPLAY TITL. DISPLAY DISP-MAT1. COMPUTE LIN = 7. COMPUTE COL = 20. MOVE 0 TO FLAG. PERFORM ACCEPT-MATRIX VARYING I FROM 1 BY 1 UNTIL I > 3 AFTER J FROM 1 BY 1 UNTIL J > 3. DISPLAY DISP-MAT2. MOVE 1 TO FLAG. COMPUTE LIN = 11. COMPUTE COL = 20. PERFORM ACCEPT-MATRIX VARYING I FROM 1 BY 1 UNTIL I > 3 AFTER J FROM 1 BY 1 UNTIL J > 3. ACCEPT-MATRIX. ACCEPT (LIN, COL) TEMP1. IF FLAG = 0 MOVE TEMP1 TO MAT1(I, J) ELSE IF FLAG = 1 MOVE TEMP1 TO MAT2(I, J). IF J < 3 COMPUTE COL = COL + 5. IF J = 3 COMPUTE COL = 20 COMPUTE LIN = LIN + 1. CALC-RESULT. PERFORM CAL-ADDITION VARYING I FROM 1 BY 1 UNTIL I > 3 AFTER J FROM 1 BY 1 UNTIL J > 3. CAL-ADDITION. COMPUTE TEMP3 = 0. PERFORM MUL-RESULT VARYING K FROM 1 BY 1 UNTIL K > 3. MOVE TEMP3 TO MAT3(I, J). MUL-RESULT. MOVE MAT1(I, J) TO TEMP1. MOVE MAT2(K, J) TO TEMP2. COMPUTE TEMP = TEMP1 * TEMP2. COMPUTE TEMP3 = TEMP3 + TEMP. DISP-RESULT. DISPLAY MAT-RES. COMPUTE LIN=16. COMPUTE COL=25. PERFORM DISP-MAT3 VARYING I FROM 1 BY 1 UNTIL I > 3 AFTER J FROM 1 BY 1 UNTIL J > 3. DISPLAY (20, 5) "THIS RECORD HAS BEEN SAVED TO A FILE". DISPLAY (21, 5) "DO YOU WANT TO VIEW THIS SAVED RECORD". DISPLAY (22, 5) "AND PREVIOUSLY SAVED RECORDS ? (Y/N) :". ACCEPT ( , 50) DUMMY. DISP-MAT3. DISPLAY (LIN, COL) MAT3(I, J). IF J < 3 COMPUTE COL=COL + 5. IF J=3 COMPUTE COL=25 COMPUTE LIN=LIN + 1. READ-REC. OPEN INPUT MAT-FILE. MOVE "N" TO FILE-END. PERFORM READ-MAT. PERFORM DISP-REC UNTIL FILE-END = "Y". CLOSE MAT-FILE. DISP-REC. DISPLAY (1, 1) ERASE. DISPLAY (1, 7) "RECORD AS READ FROM FILE". DISPLAY (3, 5) "MATRIX 1". DISPLAY (8, 6) "MATRIX 2". DISPLAY (13, 4) "RESULTANT". PERFORM MOVE-REC VARYING I FROM 1 BY 1 UNTIL I > 3 AFTER J FROM 1 BY 1 UNTIL J > 3. COMPUTE LIN = 3. COMPUTE COL = 15. PERFORM TO-SCREEN1 VARYING I FROM 1 BY 1 UNTIL I > 3 AFTER J FROM 1 BY 1 UNTIL J > 3. COMPUTE LIN = 13. COMPUTE COL = 15. PERFORM TO-SCREEN3 VARYING I FROM 1 BY 1 UNTIL I > 3 AFTER J FROM 1 BY 1 UNTIL J > 3. DISPLAY (20, 1) ERASE. DISPLAY (21, 1) ERASE. DISPLAY (22, 1) ERASE. DISPLAY (20, 15) "PRESS ANY KEY TO CONTINUE". ACCEPT (20, 45) DUMMY. PERFORM READ-MAT. TO-SCREEN1. DISPLAY (LIN, COL) MAT11(I, J). IF J < 3 COMPUTE COL=COL + 5. IF J = 3 COMPUTE LIN=LIN + 1 COMPUTE COL = 15. TO-SCREEN2. DISPLAY (LIN, COL) MAT12(I, J). IF J < 3 COMPUTE COL=COL + 5. IF J = 3 COMPUTE LIN=LIN + 1 COMPUTE COL = 15. TO-SCREEN3. DISPLAY (LIN, COL) MAT13(I, J). IF J < 3 COMPUTE COL=COL + 5. IF J = 3 COMPUTE LIN=LIN + 1 COMPUTE COL = 15. MOVE-REC. MOVE MAT1(I, J) TO MAT11(I, J). MOVE MAT2(I, J) TO MAT12(I, J). MOVE MAT3(I, J) TO MAT13(I, J). READ-MAT. READ MAT-FILE NEXT RECORD AT END MOVE "Y" TO FILE-END. IF FILE-END = "Y" DISPLAY (20, 1) ERASE DISPLAY (20, 15) "RECORDS OVER". TO-CONTINUE. DISPLAY (21, 30) "CONTINUE ? (Y/N) : ". ACCEPT DUMMY. IF DUMMY = "Y" GO TO PROGRAM-BEGIN ELSE GO TO PROGRAM-DONE.