99 lines
2.9 KiB
COBOL
99 lines
2.9 KiB
COBOL
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. test-balanced-brackets.
|
|
|
|
DATA DIVISION.
|
|
WORKING-STORAGE SECTION.
|
|
01 True-Val CONSTANT 0.
|
|
01 False-Val CONSTANT 1.
|
|
|
|
LOCAL-STORAGE SECTION.
|
|
01 current-time PIC 9(10).
|
|
|
|
01 bracket-type PIC 9.
|
|
88 add-open-bracket VALUE 1.
|
|
|
|
01 bracket-string-area.
|
|
03 bracket-string PIC X(10) OCCURS 10 TIMES.
|
|
|
|
01 i PIC 999.
|
|
01 j PIC 999.
|
|
|
|
PROCEDURE DIVISION.
|
|
*> Seed RANDOM().
|
|
MOVE FUNCTION CURRENT-DATE (7:10) TO current-time
|
|
MOVE FUNCTION RANDOM(current-time) TO current-time
|
|
|
|
|
|
*> Generate random strings of brackets.
|
|
PERFORM VARYING i FROM 1 BY 1 UNTIL 10 < i
|
|
PERFORM VARYING j FROM 1 BY 1 UNTIL i < j
|
|
COMPUTE bracket-type =
|
|
FUNCTION REM(FUNCTION RANDOM * 1000, 2)
|
|
|
|
IF add-open-bracket
|
|
MOVE "[" TO bracket-string (i) (j:1)
|
|
ELSE
|
|
MOVE "]" TO bracket-string (i) (j:1)
|
|
END-IF
|
|
END-PERFORM
|
|
END-PERFORM
|
|
|
|
*> Display if the strings are balanced or not.
|
|
PERFORM VARYING i FROM 1 BY 1 UNTIL 10 < i
|
|
CALL "check-if-balanced" USING bracket-string (i)
|
|
IF RETURN-CODE = True-Val
|
|
DISPLAY FUNCTION TRIM(bracket-string (i))
|
|
" is balanced."
|
|
ELSE
|
|
DISPLAY FUNCTION TRIM(bracket-string (i))
|
|
" is not balanced."
|
|
END-IF
|
|
END-PERFORM
|
|
|
|
GOBACK
|
|
.
|
|
|
|
END PROGRAM test-balanced-brackets.
|
|
|
|
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. check-if-balanced.
|
|
|
|
DATA DIVISION.
|
|
WORKING-STORAGE SECTION.
|
|
01 True-Val CONSTANT 0.
|
|
01 False-Val CONSTANT 1.
|
|
|
|
LOCAL-STORAGE SECTION.
|
|
01 nesting-level PIC S999.
|
|
01 i PIC 999.
|
|
|
|
LINKAGE SECTION.
|
|
01 bracket-string PIC X(100).
|
|
|
|
PROCEDURE DIVISION USING bracket-string.
|
|
PERFORM VARYING i FROM 1 BY 1
|
|
UNTIL (100 < i)
|
|
OR (bracket-string (i:1) = SPACE)
|
|
OR (nesting-level < 0)
|
|
IF bracket-string (i:1) = "["
|
|
ADD 1 TO nesting-level
|
|
ELSE
|
|
SUBTRACT 1 FROM nesting-level
|
|
IF nesting-level < 0
|
|
MOVE False-Val TO RETURN-CODE
|
|
GOBACK
|
|
END-IF
|
|
END-IF
|
|
END-PERFORM
|
|
|
|
IF nesting-level = 0
|
|
MOVE True-Val TO RETURN-CODE
|
|
ELSE
|
|
MOVE False-Val TO RETURN-CODE
|
|
END-IF
|
|
|
|
GOBACK
|
|
.
|
|
|
|
END PROGRAM check-if-balanced.
|