Caesar cipher: Difference between revisions

Content added Content deleted
imported>Acediast
(→‎{{header|COBOL}}: Syntax highlighting and slight optimization.)
Line 1,911: Line 1,911:
</pre>
</pre>


{{works with|OpenCOBOL|2.0}}
{{works with|COBOL 2002}}
<syntaxhighlight lang="cobol"> >>SOURCE FORMAT IS FREE
<syntaxhighlight lang="cobolfree"> >>SOURCE FORMAT IS FREE
IDENTIFICATION DIVISION.
PROGRAM-ID. caesar-cipher.
PROGRAM-ID. caesar-cipher.


Line 1,919: Line 1,920:
REPOSITORY.
REPOSITORY.
FUNCTION encrypt
FUNCTION encrypt
FUNCTION decrypt
FUNCTION decrypt.

.
DATA DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
WORKING-STORAGE SECTION.
01 plaintext PIC X(50).
01 plaintext PIC X(50).
01 offset PIC 99.
01 offset USAGE BINARY-CHAR.

01 encrypted-str PIC X(50).
01 encrypted-str PIC X(50).


PROCEDURE DIVISION.
PROCEDURE DIVISION.
DISPLAY "Enter a message to encrypt: " NO ADVANCING
DISPLAY "Enter a message to encrypt: " WITH NO ADVANCING
ACCEPT plaintext
ACCEPT plaintext
DISPLAY "Enter the amount to shift by: " NO ADVANCING
DISPLAY "Enter the amount to shift by: " WITH NO ADVANCING
ACCEPT offset
ACCEPT offset
MOVE encrypt(offset, plaintext) TO encrypted-str
DISPLAY "Encrypted: " encrypted-str
DISPLAY "Decrypted: " decrypt(offset, encrypted-str).


MOVE FUNCTION encrypt(offset, plaintext) TO encrypted-str
DISPLAY "Encrypted: " encrypted-str
DISPLAY "Decrypted: " FUNCTION decrypt(offset, encrypted-str)
.
END PROGRAM caesar-cipher.
END PROGRAM caesar-cipher.


IDENTIFICATION DIVISION.

FUNCTION-ID. encrypt.
FUNCTION-ID. encrypt.

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
FUNCTION ALL INTRINSIC.


DATA DIVISION.
DATA DIVISION.
LOCAL-STORAGE SECTION.
LOCAL-STORAGE SECTION.
01 i PIC 9(3).
01 i USAGE INDEX.
01 a USAGE BINARY-CHAR.

01 a PIC 9(3).

LINKAGE SECTION.
LINKAGE SECTION.
01 offset PIC 99.
01 offset USAGE BINARY-CHAR.
01 str PIC X(50).
01 str PIC X(50).

01 encrypted-str PIC X(50).
01 encrypted-str PIC X(50).


PROCEDURE DIVISION USING offset, str RETURNING encrypted-str.
PROCEDURE DIVISION USING offset, str RETURNING encrypted-str.
PERFORM VARYING i FROM 1 BY 1 UNTIL i > LENGTH(str)
MOVE str TO encrypted-str
PERFORM VARYING i FROM 1 BY 1 UNTIL i > FUNCTION LENGTH(str)
IF str(i:1) IS NOT ALPHABETIC OR str(i:1) = SPACE
IF encrypted-str (i:1) IS NOT ALPHABETIC OR encrypted-str (i:1) = SPACE
MOVE str(i:1) TO encrypted-str(i:1)
EXIT PERFORM CYCLE
EXIT PERFORM CYCLE
END-IF
END-IF
IF str(i:1) IS ALPHABETIC-UPPER

IF encrypted-str (i:1) IS ALPHABETIC-UPPER
MOVE ORD("A") TO a
MOVE FUNCTION ORD("A") TO a
ELSE
ELSE
MOVE FUNCTION ORD("a") TO a
MOVE ORD("a") TO a
END-IF
END-IF
MOVE CHAR(MOD(ORD(str(i:1)) - a + offset, 26) + a)
TO encrypted-str(i:1)
END-PERFORM
EXIT FUNCTION.


MOVE FUNCTION CHAR(FUNCTION MOD(FUNCTION ORD(encrypted-str (i:1))
- a + offset, 26) + a)
TO encrypted-str (i:1)
END-PERFORM
.
END FUNCTION encrypt.
END FUNCTION encrypt.


IDENTIFICATION DIVISION.

FUNCTION-ID. decrypt.
FUNCTION-ID. decrypt.


Line 1,981: Line 1,980:
CONFIGURATION SECTION.
CONFIGURATION SECTION.
REPOSITORY.
REPOSITORY.
FUNCTION encrypt
FUNCTION encrypt.

.
DATA DIVISION.
DATA DIVISION.
LOCAL-STORAGE SECTION.
LOCAL-STORAGE SECTION.
01 decrypt-offset PIC 99.
01 decrypt-offset USAGE BINARY-CHAR.

LINKAGE SECTION.
LINKAGE SECTION.
01 offset PIC 99.
01 offset USAGE BINARY-CHAR.
01 str PIC X(50).
01 str PIC X(50).

01 decrypted-str PIC X(50).
01 decrypted-str PIC X(50).


PROCEDURE DIVISION USING offset, str RETURNING decrypted-str.
PROCEDURE DIVISION USING offset, str RETURNING decrypted-str.
SUBTRACT 26 FROM offset GIVING decrypt-offset
SUBTRACT offset FROM 26 GIVING decrypt-offset
MOVE FUNCTION encrypt(decrypt-offset, str) TO decrypted-str
MOVE encrypt(decrypt-offset, str) TO decrypted-str
.
EXIT FUNCTION.

END FUNCTION decrypt.</syntaxhighlight>
END FUNCTION decrypt.</syntaxhighlight>


Line 2,006: Line 2,004:
Decrypted: The quick brown fox jumps over the lazy dog.
Decrypted: The quick brown fox jumps over the lazy dog.
</pre>
</pre>

=={{header|CoffeeScript}}==
=={{header|CoffeeScript}}==
<syntaxhighlight lang="coffeescript">cipher = (msg, rot) ->
<syntaxhighlight lang="coffeescript">cipher = (msg, rot) ->