RosettaCodeData/Task/Caesar-cipher/COBOL/caesar-cipher-2.cobol

85 lines
2.2 KiB
Text
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
>>SOURCE FORMAT IS FREE
2023-09-01 09:35:06 -07:00
IDENTIFICATION DIVISION.
2023-07-01 11:58:00 -04:00
PROGRAM-ID. caesar-cipher.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
FUNCTION encrypt
2023-09-01 09:35:06 -07:00
FUNCTION decrypt.
2023-07-01 11:58:00 -04:00
DATA DIVISION.
WORKING-STORAGE SECTION.
01 plaintext PIC X(50).
2023-09-01 09:35:06 -07:00
01 offset USAGE BINARY-CHAR.
2023-07-01 11:58:00 -04:00
01 encrypted-str PIC X(50).
PROCEDURE DIVISION.
2023-09-01 09:35:06 -07:00
DISPLAY "Enter a message to encrypt: " WITH NO ADVANCING
2023-07-01 11:58:00 -04:00
ACCEPT plaintext
2023-09-01 09:35:06 -07:00
DISPLAY "Enter the amount to shift by: " WITH NO ADVANCING
2023-07-01 11:58:00 -04:00
ACCEPT offset
2023-09-01 09:35:06 -07:00
MOVE encrypt(offset, plaintext) TO encrypted-str
2023-07-01 11:58:00 -04:00
DISPLAY "Encrypted: " encrypted-str
2023-09-01 09:35:06 -07:00
DISPLAY "Decrypted: " decrypt(offset, encrypted-str).
2023-07-01 11:58:00 -04:00
2023-09-01 09:35:06 -07:00
END PROGRAM caesar-cipher.
2023-07-01 11:58:00 -04:00
2023-09-01 09:35:06 -07:00
IDENTIFICATION DIVISION.
2023-07-01 11:58:00 -04:00
FUNCTION-ID. encrypt.
2023-09-01 09:35:06 -07:00
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
FUNCTION ALL INTRINSIC.
2023-07-01 11:58:00 -04:00
DATA DIVISION.
LOCAL-STORAGE SECTION.
2023-09-01 09:35:06 -07:00
01 i USAGE INDEX.
01 a USAGE BINARY-CHAR.
2023-07-01 11:58:00 -04:00
LINKAGE SECTION.
2023-09-01 09:35:06 -07:00
01 offset USAGE BINARY-CHAR.
2023-07-01 11:58:00 -04:00
01 str PIC X(50).
01 encrypted-str PIC X(50).
PROCEDURE DIVISION USING offset, str RETURNING encrypted-str.
2023-09-01 09:35:06 -07:00
PERFORM VARYING i FROM 1 BY 1 UNTIL i > LENGTH(str)
IF str(i:1) IS NOT ALPHABETIC OR str(i:1) = SPACE
MOVE str(i:1) TO encrypted-str(i:1)
2023-07-01 11:58:00 -04:00
EXIT PERFORM CYCLE
END-IF
2023-09-01 09:35:06 -07:00
IF str(i:1) IS ALPHABETIC-UPPER
MOVE ORD("A") TO a
2023-07-01 11:58:00 -04:00
ELSE
2023-09-01 09:35:06 -07:00
MOVE ORD("a") TO a
2023-07-01 11:58:00 -04:00
END-IF
2023-09-01 09:35:06 -07:00
MOVE CHAR(MOD(ORD(str(i:1)) - a + offset, 26) + a)
TO encrypted-str(i:1)
2023-07-01 11:58:00 -04:00
END-PERFORM
2023-09-01 09:35:06 -07:00
EXIT FUNCTION.
2023-07-01 11:58:00 -04:00
2023-09-01 09:35:06 -07:00
END FUNCTION encrypt.
2023-07-01 11:58:00 -04:00
2023-09-01 09:35:06 -07:00
IDENTIFICATION DIVISION.
2023-07-01 11:58:00 -04:00
FUNCTION-ID. decrypt.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
2023-09-01 09:35:06 -07:00
FUNCTION encrypt.
2023-07-01 11:58:00 -04:00
DATA DIVISION.
LOCAL-STORAGE SECTION.
2023-09-01 09:35:06 -07:00
01 decrypt-offset USAGE BINARY-CHAR.
2023-07-01 11:58:00 -04:00
LINKAGE SECTION.
2023-09-01 09:35:06 -07:00
01 offset USAGE BINARY-CHAR.
2023-07-01 11:58:00 -04:00
01 str PIC X(50).
01 decrypted-str PIC X(50).
PROCEDURE DIVISION USING offset, str RETURNING decrypted-str.
2023-09-01 09:35:06 -07:00
SUBTRACT offset FROM 26 GIVING decrypt-offset
MOVE encrypt(decrypt-offset, str) TO decrypted-str
EXIT FUNCTION.
2023-07-01 11:58:00 -04:00
END FUNCTION decrypt.