60 lines
1.9 KiB
COBOL
60 lines
1.9 KiB
COBOL
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. RECAMAN.
|
|
|
|
DATA DIVISION.
|
|
WORKING-STORAGE SECTION.
|
|
01 RECAMAN-SEQUENCE COMP.
|
|
02 A PIC 999 OCCURS 99 TIMES INDEXED BY I.
|
|
02 N PIC 999 VALUE 0.
|
|
|
|
01 VARIABLES COMP.
|
|
02 ADDC PIC S999.
|
|
02 SUBC PIC S999.
|
|
02 SPTR PIC 99 VALUE 1.
|
|
|
|
01 OUTPUT-FORMAT.
|
|
02 OUTI PIC Z9.
|
|
02 OUTN PIC BZ9.
|
|
02 OUTS PIC X(79).
|
|
|
|
PROCEDURE DIVISION.
|
|
BEGIN.
|
|
PERFORM GENERATE-NEXT-ITEM 15 TIMES.
|
|
PERFORM COLLATE-ITEM VARYING I FROM 1 BY 1
|
|
UNTIL I IS GREATER THAN 15.
|
|
DISPLAY 'First 15 items:' OUTS.
|
|
|
|
FIND-REPEATING.
|
|
PERFORM GENERATE-NEXT-ITEM.
|
|
SET I TO 1.
|
|
SEARCH A VARYING I
|
|
WHEN I IS NOT LESS THAN N
|
|
NEXT SENTENCE
|
|
WHEN A(I) IS EQUAL TO A(N)
|
|
SUBTRACT 1 FROM N GIVING OUTI
|
|
MOVE A(N) TO OUTN
|
|
DISPLAY 'First repeated item: A(' OUTI ') =' OUTN
|
|
STOP RUN.
|
|
GO TO FIND-REPEATING.
|
|
|
|
GENERATE-NEXT-ITEM.
|
|
IF N IS EQUAL TO ZERO
|
|
MOVE ZERO TO A(1)
|
|
ELSE
|
|
ADD N, A(N) GIVING ADDC
|
|
SUBTRACT N FROM A(N) GIVING SUBC
|
|
IF SUBC IS NOT GREATER THAN ZERO
|
|
MOVE ADDC TO A(N + 1)
|
|
ELSE
|
|
SET I TO 1
|
|
SEARCH A VARYING I
|
|
WHEN I IS NOT LESS THAN N
|
|
MOVE SUBC TO A(N + 1)
|
|
WHEN A(I) IS EQUAL TO SUBC
|
|
MOVE ADDC TO A(N + 1).
|
|
ADD 1 TO N.
|
|
|
|
COLLATE-ITEM.
|
|
MOVE A(I) TO OUTN.
|
|
STRING OUTN DELIMITED BY SIZE INTO OUTS WITH POINTER SPTR.
|