A COBOL program - something to contrast with old Turbo Pascal! :)
-->A COBOL Program:<--


      *89012345678901234567890123456789012345678901234567890123456789012
      *----------------------------------------------------------------- 
       IDENTIFICATION DIVISION.
       PROGRAM-ID.                        prog-750.
       AUTHOR.                            ALVIN PON.
       INSTALLATION.                      PC.
       DATE-WRITTEN.                      18 Mar 1996.
       DATE-COMPILED.
       REMARKS.
      *    Multi-dimensional tables
      *    Use a table to represent a noughts and crosses grid.
      *    'Moves' are input in the form RC where R is the row number
      *    (1, 2 or 3) and C is the column number (1, 2 or 3).
      *    After each move display the grid showing the number of moves
      *    made in each position.  Allow a maximum of 9 moves.
      *    To stop the program before 9 moves, input 00.
      *----------------------------------------------------------------- 
      *89012345678901234567890123456789012345678901234567890123456789012
      *----------------------------------------------------------------- 
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SOURCE-COMPUTER.                   IBM-PC.
      *INPUT-OUTPUT SECTION.
      *FILE-CONTROL.
      *----------------------------------------------------------------- 
      *89012345678901234567890123456789012345678901234567890123456789012
      *----------------------------------------------------------------- 
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       01  W-AA01-MOVE-INP.                  
           03  W-AA02-R-INP             PIC X.
               88  QUIT-R               VALUE '0'.      
           03  W-AA03-C-INP             PIC X.
               88  QUIT-C               VALUE '0'.   

       01  W-AB01-MOVE-VAL.                  
           03  W-AB02-R-VAL             PIC 9.
               88  VAL-R                VALUE 1 2 3.
           03  W-AB03-C-VAL             PIC 9.
               88  VAL-C                VALUE 1 2 3.
       
       01  W-AC01-MOVE-TEMP.                  
           03  W-AC02-R-TEMP            PIC X.
           03  W-AC03-C-TEMP            PIC X.
       
       01  W-AD01-MULT-DIM-TABLE.        
           03  W-AD02-ROW               OCCURS 3.
               05  W-AD03-BOX           PIC 9 OCCURS 3.
       
       01  W-AE01-GRID-LN.
           03  W-AE02-COL1-DS           PIC Z9.
           03  FILLER                   PIC XX VALUE ' |'.
           03  W-AE03-COL2-DS           PIC Z9.
           03  FILLER                   PIC XX VALUE ' |'.
           03  W-AE04-COL3-DS           PIC Z9.

       01  W-AF04-HORIZONTAL-LN.
           03  FILLER                   PIC X(11) VALUE '---+---+---'.
       
       01  W-AG01-READ-FLAG             PIC X(8).
           88  READING                  VALUE 'reading'.
           88  QUIT                     VALUE 'quit'.

       01  W-AH01-ERROR-FLAG-RC         PIC X(8).       
       01  W-AH02-ERROR-FLAG-COORD      PIC X(8).
       01  W-AI01-MOVE-COUNTER          PIC 99.
       01  W-AI02-ROW-COUNTER           PIC 99.
       01  W-AI03-INIT-COUNTER          PIC 99.
       01  W-ZZ99-C                     PIC X(30) VALUE
                                        'prompt,tab,no beep,no convert'.
      *----------------------------------------------------------------- 
      *89012345678901234567890123456789012345678901234567890123456789012
      *----------------------------------------------------------------- 
       PROCEDURE DIVISION.
       MAIN SECTION.

      *Execute the program
       A100-EXECUTE-PROGRAM.
           PERFORM B100-START-PROGRAM.
           PERFORM B200-EXECUTE-SPECIFICATION.
           PERFORM B300-FINISH-PROGRAM.
           STOP RUN.

      *Start the program.
       B100-START-PROGRAM.
           DISPLAY '<<< prog-750 >>>' LINE 5 ERASE.
           DISPLAY ' '.

      *Execute the specification
       B200-EXECUTE-SPECIFICATION.
           MOVE 'reading' TO W-AG01-READ-FLAG.
           MOVE ZEROS TO W-AD01-MULT-DIM-TABLE.
           MOVE 0 TO W-AI01-MOVE-COUNTER
                     W-AI02-ROW-COUNTER
                     W-AI03-INIT-COUNTER.
           PERFORM X100-DISPLAY-GRID.
           DISPLAY ' '
           DISPLAY 'Please enter a move beneath the mask'. 
           DISPLAY '(Maximum of 9 moves, use 00 to QUIT)'.
           DISPLAY 'RC'.
           ACCEPT W-AA01-MOVE-INP CONTROL W-ZZ99-C.
           PERFORM C100-PROCESS-COORDS 
               UNTIL W-AI01-MOVE-COUNTER IS = 9 OR QUIT.
           IF W-AI01-MOVE-COUNTER IS = 0 THEN
               DISPLAY ' '
               DISPLAY 'no valid moves were entered'
           ELSE
               DISPLAY ' '
               DISPLAY 'end of input'.
      
      *Finish the program
       B300-FINISH-PROGRAM.
           DISPLAY ' '.
           DISPLAY 'prog-750 finished'.

      *Process co-ordinates and getting next
       C100-PROCESS-COORDS.
           MOVE 'error' TO W-AH01-ERROR-FLAG-RC.
           IF (QUIT-R AND QUIT-C) THEN 
               MOVE 'quit' TO W-AG01-READ-FLAG
           ELSE
               PERFORM D100-VALIDATE-MOVE-INPUT.
           
           IF W-AA01-MOVE-INP IS NOT = W-AC01-MOVE-TEMP AND 
               W-AH01-ERROR-FLAG-RC = 'ok' THEN
                   PERFORM D200-INITIALISE-TABLE VARYING 
                       W-AI03-INIT-COUNTER FROM 1 BY 1 UNTIL 
                           W-AI03-INIT-COUNTER IS > 3.

           IF W-AH01-ERROR-FLAG-RC = 'ok' THEN
               ADD 1 TO W-AI01-MOVE-COUNTER
                        W-AD03-BOX(W-AB02-R-VAL W-AB03-C-VAL)
               MOVE W-AB01-MOVE-VAL TO W-AC01-MOVE-TEMP
               DISPLAY ' '
               PERFORM X100-DISPLAY-GRID. 
           
           IF W-AI01-MOVE-COUNTER IS < 9 AND READING THEN
               DISPLAY ' '
               DISPLAY 'RC'
               ACCEPT W-AA01-MOVE-INP CONTROL W-ZZ99-C.
               
      *Validate move input
       D100-VALIDATE-MOVE-INPUT.
           IF W-AA02-R-INP IS NUMERIC AND W-AA03-C-INP IS NUMERIC THEN 
               MOVE W-AA01-MOVE-INP TO W-AB01-MOVE-VAL
               PERFORM E100-CHECK-RANGE-MOVE
           ELSE
               DISPLAY '??  ERROR - Move co-ordinates are not numeric'.
      
      *Initialise the table 
       D200-INITIALISE-TABLE.
           MOVE 0 TO W-AD03-BOX(W-AI03-INIT-COUNTER 1).
           MOVE 0 TO W-AD03-BOX(W-AI03-INIT-COUNTER 2).
           MOVE 0 TO W-AD03-BOX(W-AI03-INIT-COUNTER 3).

      *Check range of move co-ordinates
       E100-CHECK-RANGE-MOVE.
           MOVE 'ok' TO W-AH02-ERROR-FLAG-COORD.
           IF NOT VAL-R THEN
               DISPLAY '?   ERROR - Row number should be 1, 2 or 3'
               MOVE 'error' TO W-AH02-ERROR-FLAG-COORD.

           IF NOT VAL-C THEN
               DISPLAY ' ?  ERROR - Column number should be 1, 2 or 3'
               MOVE 'error' TO W-AH02-ERROR-FLAG-COORD.

           IF W-AH02-ERROR-FLAG-COORD IS = 'ok' THEN
               MOVE 'ok' TO W-AH01-ERROR-FLAG-RC.

      *Display the noughts and crosses grid
       X100-DISPLAY-GRID.
           PERFORM Z100-DISPLAY-GRID-ROW VARYING W-AI02-ROW-COUNTER 
               FROM 1 BY 1 UNTIL W-AI02-ROW-COUNTER IS > 3.
           
      *Display a row of grid
       Z100-DISPLAY-GRID-ROW.
           MOVE W-AD03-BOX(W-AI02-ROW-COUNTER 1) TO W-AE02-COL1-DS.
           MOVE W-AD03-BOX(W-AI02-ROW-COUNTER 2) TO W-AE03-COL2-DS.
           MOVE W-AD03-BOX(W-AI02-ROW-COUNTER 3) TO W-AE04-COL3-DS.
           DISPLAY W-AE01-GRID-LN.
           IF W-AI02-ROW-COUNTER IS < 3 THEN
               DISPLAY W-AF04-HORIZONTAL-LN.     
      *----------------------------------------------------------------- 
      *89012345678901234567890123456789012345678901234567890123456789012

Back to main menu



E-mail me at:
GeoNETrix@hotmail.com
and give me any comments and suggestions. Thanks!