PROGRAM SHIFR_PLEYFERA;
USES Crt;
TYPE
path = STRING[14];
Stroca = STRING;
Simvol = array [1..6, 1..6] of CHAR;
MATR = array [1..255] of RECORD
STROK, STOLB: Byte;
END;
CONST INDEX: Simvol = (('А', 'Ж', 'Б', 'М', 'Ц', 'В'), {типизированные константы для матрицы Плэйфера}
('Ч', 'Г', 'Н', 'Ш', 'Д', 'О'),
('Е', 'Щ', ',', 'Х', 'У', 'П'),
('.', 'З', 'Ъ', 'Р', 'И', 'Й'),{нужно только 1 символ, а не 3, типа ' . '}
('С', 'Ь', 'К', 'Э', 'Т', 'Л'),
('Ю', 'Я', ' ', 'Ы', 'Ф', '-'));
VAR
Var_file1, Var_file2: Text;
Name1, Name2: path;
ALFAVIT: MATR;
Str: Stroca;
K: Char;
{Определение координат символов матрицы Плэйфера}
PROCEDURE SHIFR_PLEYFER(Var ALFAVIT: MATR; INDEX: Simvol);
VAR I, J: Byte; {I, J - счетчики циклов}
BEGIN {Начало основного блока ПП SHIFR_PLEYFER}
FOR I:= 1 TO 6 DO for J:= 1 to 6 do
WITH ALFAVIT[Ord(INDEX[I, J])] DO
begin
STROK:= I; {строка символа}
STOLB:= J; {столбец символа}
end;
END; {Конец основного блока ПП SHIFR_PLEYFER}
{Производится шифрование строки открытого текста}
FUNCTION SHIFR_TXT(Str: Stroca; Alfavit: MATR; INDEX: Simvol): Stroca;
VAR {Объявление переменных}
SIM1, SIM2: Char;
New: STRING;
I, Dlina_str, Dlina_new: Byte; {I - счетчик цикла}
BEGIN {Начало основного блока ПФ SHIFR_TXT}
{В открытом тексте вставляется спец. знак "-" между одинаковыми символами}
New:= '';
Dlina_str:= Length(Str);
FOR I:= 1 TO Dlina_str DO IF (Str[I] = Str[I+1]) THEN New:= (New + Str[I] + '-') ELSE New:= (New + Str[I]);
{Добавление спец. знака "-" в конец открытого текста в случае нечетного количества символов в строке }
IF Odd(Length(Str)) = TRUE THEN New:= New + '-';
{Шифрование открытого текста по матрице алфавита Плэйфера}
Str:= '';
Dlina_new:= Length(New)div 2;
FOR I:= 1 TO Dlina_new DO
begin
SIM1:= New[2*I - 1];
SIM2:= New[2*I];
IF (ALFAVIT[Ord(SIM1)].STROK = ALFAVIT[Ord(SIM2)].STROK) THEN
{Пара символов находятся в одной строке матрицы}
Str:= Str + INDEX[(ALFAVIT[Ord(SIM1)].STROK), ((ALFAVIT[Ord(SIM1)].STOLB mod 6) + 1)]
+ INDEX[(ALFAVIT[Ord(SIM2)].STROK), ((ALFAVIT[Ord(SIM2)].STOLB mod 6) + 1)]
ELSE
IF (ALFAVIT[Ord(SIM1)].STOLB = ALFAVIT[Ord(SIM2)].STOLB) THEN
{Пара символов находятся в одном столбце матрицы}
Str:= Str + INDEX[((ALFAVIT[Ord(SIM1)].STROK mod 6) + 1), (ALFAVIT[Ord(SIM1)].STOLB)]
+ INDEX[((ALFAVIT[Ord(SIM2)].STROK mod 6) + 1), (ALFAVIT[Ord(SIM2)].STOLB)]
ELSE
{Пара символов находятся в разных строках и столбцах матрицы}
Str:= Str + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (ALFAVIT[Ord(SIM1)].STOLB)]
+ INDEX[(ALFAVIT[Ord(SIM1)].STROK), (ALFAVIT[Ord(SIM2)].STOLB)];
end;
SHIFR_TXT:= Str;
END; {Конец основного блока ПФ SHIFR_TXT}
{Производится расшифрация строки }
FUNCTION DESHIFR_TXT(Str: Stroca; Alfavit: MATR; INDEX: Simvol): Stroca;
VAR {Объявление переменных}
SIM1, SIM2: Char;
NEW: STRING;
I, Dlina_str, Dlina_new: Byte; {I - счетчик цикла}
BEGIN {Начало основного блока ПФ DESHIFR_TXT}
{Дешифрование открытого текста по матрице алфавита Плэйфера}
New:= '';
Dlina_str:= Length(Str)div 2;
FOR I:= 1 TO Dlina_str DO
begin
SIM1:= Str[2*I - 1];
SIM2:= Str[2*I];
IF (ALFAVIT[Ord(SIM1)].STROK = ALFAVIT[Ord(SIM2)].STROK) THEN
{Пара символов находятся в одной строке матрицы}
New:= New + INDEX[(ALFAVIT[Ord(SIM1)].STROK), (((ALFAVIT[Ord(SIM1)].STOLB + 4) mod 6) + 1)]
+ INDEX[(ALFAVIT[Ord(SIM2)].STROK), (((ALFAVIT[Ord(SIM2)].STOLB + 4) mod 6) + 1)]
ELSE
IF (ALFAVIT[Ord(SIM1)].STOLB = ALFAVIT[Ord(SIM2)].STOLB) THEN
{Пара символов находятся в одном столбце матрицы}
New:= New + INDEX[(((ALFAVIT[Ord(SIM1)].STROK + 4) mod 6) + 1), (ALFAVIT[Ord(SIM1)].STOLB)]
+ INDEX[(((ALFAVIT[Ord(SIM2)].STROK + 4) mod 6) + 1), (ALFAVIT[Ord(SIM2)].STOLB)]
ELSE
{Пара симво
Нашел какой то сурс. там есть комментарии всё думаю понятно.
Другие языки программирования и технологии
Кто сможет написать понятную программу на Pascal ABC? нужно реализовать шифр Плейфера Буду вам очень признателен
Вадим Карась
посмотрел, ничего не понял )) но объем вдохновил отказаться от помощи автору )))
Похожие вопросы
- Напишите пожалуйста программы для Pascal ABC:
- Помогите написать 2 программы в Pascal ABC
- Проблема с программой в Pascal ABC,Встречено ';',а ожидалось ':'. Если менять, то вылетает ещё ошибка с if
- Программа в pascal abc
- Помогите написать программу в Pascal abc net
- Помогите написать программы по Pascal ABC
- Напишите пожалуйста 2 программы в pascal ABC, программы в описании
- Нужно создать программу в Pascal ABC.NET
- Прошу помочь. Нужно составить шифр плейфера к следующей фразе "то не останется ничего". Заранее огромное спасибо.
- Подскажите пожалуйста, какая ошибка в программе на Pascal ABC.NET?