Palindrome Checker
Problem Description
Check if a string is a palindrome (same forward and backward).
Expected Output
IS PALINDROME or NOT PALINDROME
Hints
Compare first with last, second with second-last, etc.
Solution
IDENTIFICATION DIVISION.
PROGRAM-ID. PALINDROME.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-INPUT PIC X(50).
01 WS-CLEAN PIC X(50).
01 WS-LEN PIC 9(2).
01 WS-I PIC 9(2).
01 WS-J PIC 9(2).
01 WS-MID PIC 9(2).
01 WS-IS-PAL PIC 9 VALUE 1.
PROCEDURE DIVISION.
DISPLAY "ENTER STRING: ".
ACCEPT WS-INPUT.
* Convert to uppercase for comparison
MOVE WS-INPUT TO WS-CLEAN.
INSPECT WS-CLEAN CONVERTING
"abcdefghijklmnopqrstuvwxyz" TO
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".
MOVE FUNCTION LENGTH(FUNCTION TRIM(WS-CLEAN)) TO WS-LEN.
COMPUTE WS-MID = WS-LEN / 2.
MOVE 1 TO WS-IS-PAL.
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > WS-MID
COMPUTE WS-J = WS-LEN - WS-I + 1
IF WS-CLEAN(WS-I:1) NOT = WS-CLEAN(WS-J:1)
MOVE 0 TO WS-IS-PAL
END-IF
END-PERFORM.
IF WS-IS-PAL = 1
DISPLAY WS-INPUT " IS A PALINDROME"
ELSE
DISPLAY WS-INPUT " IS NOT A PALINDROME"
END-IF.
STOP RUN.
Explanation:
Compare character i with character (length-i+1) for all i up to middle.