       IDENTIFICATION DIVISION.
       PROGRAM-ID. SHELL3REC.

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           COPY "OPTIONAL.CPY".

       DATA DIVISION.
       FILE SECTION.

       FD  FIETS-FILE.
       01  F-REC.
           05 F-DATE     PIC X(8).
           05 F-DIST     PIC 9(5).
           05 F-TIMESEC  PIC 9(5).
           05 F-HR       PIC 9(3).
           05 F-WGT      PIC 9(3).

       FD  LOOP-FILE.
       01  L-REC.
           05 L-DATE     PIC X(8).
           05 L-DIST     PIC 9(5).
           05 L-TIMESEC  PIC 9(5).
           05 L-HR       PIC 9(3).
           05 L-WGT      PIC 9(3).

       FD  ZWEM-FILE.
       01  Z-REC.
           05 Z-DATE     PIC X(8).
           05 Z-DIST     PIC 9(5).
           05 Z-TIMESEC  PIC 9(5).
           05 Z-HR       PIC 9(3).
           05 Z-WGT      PIC 9(3).

       WORKING-STORAGE SECTION.

       01  TBL-COUNT        PIC 9(4) VALUE 0.

       01  TRAIN-TABLE.
           05 T-REC OCCURS 600 TIMES
              INDEXED BY IDX.
               10 T-DATE   PIC X(8).
               10 T-DIST   PIC 9(5).
               10 T-TIME   PIC 9(5).
               10 T-HR     PIC 9(3).
               10 T-WGT    PIC 9(3).

       01  TEMP-DATE        PIC X(8).
       01  TEMP-DIST        PIC 9(5).
       01  TEMP-TIME        PIC 9(5).
       01  TEMP-HR          PIC 9(3).
       01  TEMP-WGT         PIC 9(3).

       01  WORK-DATE        PIC X(8).
       01  WORK-DIST        PIC 9(5).
       01  WORK-TIME        PIC 9(5).
       01  WORK-HR          PIC 9(3).
       01  WORK-WGT         PIC 9(3).

       01  DISP-DIST        PIC ZZ9.9.
       01  DISP-TIME        PIC ZZ9.9.
       01  DISP-HR          PIC Z9.
       01  DISP-WGT         PIC Z9.

       01  GAP              PIC 9(4).
       01  I                PIC 9(4).
       01  J                PIC 9(4).

       01  EOF-FIETS        PIC X VALUE "N".
       01  EOF-LOOP         PIC X VALUE "N".
       01  EOF-ZWEM         PIC X VALUE "N".

       PROCEDURE DIVISION.
       MAIN-PARA.
           PERFORM READ-FIETS
           PERFORM READ-LOOP
           PERFORM READ-ZWEM
           PERFORM SHELL-SORT
           PERFORM SHOW-RESULT
           STOP RUN.

       READ-FIETS.
           OPEN INPUT FIETS-FILE
           PERFORM UNTIL EOF-FIETS = "Y"
              READ FIETS-FILE
                 AT END MOVE "Y" TO EOF-FIETS
                 NOT AT END
                    ADD 1 TO TBL-COUNT
                    MOVE F-DATE    TO T-DATE (TBL-COUNT)
                    MOVE F-DIST    TO T-DIST (TBL-COUNT)
                    MOVE F-TIMESEC TO T-TIME (TBL-COUNT)
                    MOVE F-HR      TO T-HR   (TBL-COUNT)
                    MOVE F-WGT     TO T-WGT  (TBL-COUNT)
              END-READ
           END-PERFORM
           CLOSE FIETS-FILE.

       READ-LOOP.
           OPEN INPUT LOOP-FILE
           PERFORM UNTIL EOF-LOOP = "Y"
              READ LOOP-FILE
                 AT END MOVE "Y" TO EOF-LOOP
                 NOT AT END
                    ADD 1 TO TBL-COUNT
                    MOVE L-DATE    TO T-DATE (TBL-COUNT)
                    MOVE L-DIST    TO T-DIST (TBL-COUNT)
                    MOVE L-TIMESEC TO T-TIME (TBL-COUNT)
                    MOVE L-HR      TO T-HR   (TBL-COUNT)
                    MOVE L-WGT     TO T-WGT  (TBL-COUNT)
              END-READ
           END-PERFORM
           CLOSE LOOP-FILE.

       READ-ZWEM.
           OPEN INPUT ZWEM-FILE
           PERFORM UNTIL EOF-ZWEM = "Y"
              READ ZWEM-FILE
                 AT END MOVE "Y" TO EOF-ZWEM
                 NOT AT END
                    ADD 1 TO TBL-COUNT
                    MOVE Z-DATE    TO T-DATE (TBL-COUNT)
                    MOVE Z-DIST    TO T-DIST (TBL-COUNT)
                    MOVE Z-TIMESEC TO T-TIME (TBL-COUNT)
                    MOVE Z-HR      TO T-HR   (TBL-COUNT)
                    MOVE Z-WGT     TO T-WGT  (TBL-COUNT)
              END-READ
           END-PERFORM
           CLOSE ZWEM-FILE.

       SHELL-SORT.
           MOVE TBL-COUNT TO GAP
           DIVIDE GAP BY 2 GIVING GAP

           PERFORM UNTIL GAP = 0
              COMPUTE I = GAP + 1
              PERFORM UNTIL I > TBL-COUNT

                 MOVE T-DATE(I) TO TEMP-DATE
                 MOVE T-DIST(I) TO TEMP-DIST
                 MOVE T-TIME(I) TO TEMP-TIME
                 MOVE T-HR(I)   TO TEMP-HR
                 MOVE T-WGT(I)  TO TEMP-WGT

                 MOVE I TO J

                 PERFORM UNTIL J <= GAP
                    MOVE T-DATE(J - GAP) TO WORK-DATE
                    MOVE T-DIST(J - GAP) TO WORK-DIST
                    MOVE T-TIME(J - GAP) TO WORK-TIME
                    MOVE T-HR(J - GAP)   TO WORK-HR
                    MOVE T-WGT(J - GAP)  TO WORK-WGT

                    IF TEMP-DATE >= WORK-DATE
                       EXIT PERFORM
                    END-IF

                    MOVE WORK-DATE TO T-DATE(J)
                    MOVE WORK-DIST TO T-DIST(J)
                    MOVE WORK-TIME TO T-TIME(J)
                    MOVE WORK-HR   TO T-HR(J)
                    MOVE WORK-WGT  TO T-WGT(J)

                    SUBTRACT GAP FROM J
                 END-PERFORM

                 MOVE TEMP-DATE TO T-DATE(J)
                 MOVE TEMP-DIST TO T-DIST(J)
                 MOVE TEMP-TIME TO T-TIME(J)
                 MOVE TEMP-HR   TO T-HR(J)
                 MOVE TEMP-WGT  TO T-WGT(J)

                 ADD 1 TO I
              END-PERFORM

              DIVIDE GAP BY 2 GIVING GAP
           END-PERFORM.

       SHOW-RESULT.
           PERFORM VARYING I FROM 1 BY 1 UNTIL I > TBL-COUNT

              COMPUTE DISP-DIST = T-DIST(I) / 10
              COMPUTE DISP-TIME = T-TIME(I) / 10

              MOVE T-HR(I)  TO DISP-HR
              MOVE T-WGT(I) TO DISP-WGT

              DISPLAY T-DATE(I) "  "
                      DISP-DIST " m  "
                      DISP-TIME " sec  "
                      DISP-HR   " bpm  "
                      DISP-WGT  " kg"

           END-PERFORM.

       END PROGRAM SHELL3REC.

