Подобен шифру Цезаря, но куда более сложен шифр Гронсфельда. Его ключ - пятизначное число. Буквы текста разбиваются на группы по пять (цифры и специальные символы не будем шифровать). Первая группа каждой цифры шифруется по способу шифровки Цезаря с ключом, роль которого играет первая цифра пятизначного числа (через столько букв делается скачок), вторая - с ключом, равным второй цифре пятизначного числа, и т. д. Таким образом, можно сказать, что поочередно используется пять ключей - цифры данного пятизначного числа.
Текст может быть зашифрован шифром Гронсфельда 100 000 способами, поэтому методом проб найти ключ очень трудно.
Поскольку ключ - пятизначное число, а нам нужны только цифры этого числа, то цифры ключа удобнее всего хрань в массиве:
var key:array [0..4] of 0..9
Составим программу:
Program Gronsfeld;
const nn=32; {число букв в алфавите}
type cifra=0..9;
var key:array [0..4] of cifra;
x, {данный ключ - пятизначное число}
i: integer;
c: char;
function shifr (c:char; k:cifra):char;
{зашифровка данной буквы ключом k}
var i:integer;
begin
i:=ord(c)+k;
if i>=nn+ord('А') then shifr:=chr(i-nn)
else shifr:=chr(i)
end; {шифр}
begin {гронсфельд}
read(x);
for i:=4 downto 0 do
begin
key[i]:=x mod 10;
x:=x div 10
end;
i:=0;
while not eof do
begin
read(c);
if c in ['А'..'Я'] then
begin
write(shifr(c, key[i mod 5]));
i:=i+1
end
else write(c);
if eoln then writeln
end
end.