Консультация № 187867
03.06.2014, 13:04
94.84 руб.
0 9 1
Здравствуйте, уважаемые эксперты! Прошу вас помочь мне с решением следующей задачи:
Вариант № 3.
Реализовать криптосистему «Доска Полибея»:

А Б В Г Д Е
А А Б В Г Д Е
Б Ж З И Й К Л
В М Н О П Р С
Г Т У Ф Х Ц Ч
Д Ш Щ Ъ Ы Ь Э
Е Ю Я . , -

Входной переменной является исходный текст, составленный из символов алфавита. Предусмотреть возможность дешифрования ранее зашифрованного текста.

Среда разработки Delphi. Операционная система windows

Обсуждение

Неизвестный
03.06.2014, 13:08
общий
Не корректно отобразилась таблица
Прикрепленные файлы:
070cfe9fb693a4181bf360da05da282c.PNG
давно
Старший Модератор
31795
6196
03.06.2014, 17:42
общий
Консоль подойдет?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
03.06.2014, 20:38
общий
Адресаты:
Да, подойдет.
давно
Старший Модератор
31795
6196
04.06.2014, 03:09
общий
это ответ
Здравствуйте, Бакумова Ю.В.!

Реализован первый вариант «квадрата Полибия»:
Цитата: Квадрат Полибия
Для шифрования на квадрате находили букву текста и вставляли в шифровку нижнюю от неё в том же столбце. Если буква была в нижней строке, то брали верхнюю из того же столбца.

Смотрите приложение. Delphi 6. Консоль.
ps: вопросы задавайте в минифорум.
Удачи!

Приложение:
program q187867;

{$APPTYPE CONSOLE}

uses
SysUtils;
{
function Polybey- функция кодирования/декодирования входящей строки
cLine:string-входящая строка
pLine:string-строка пароль
szLine:integer-размер строки в квадрате Полибия
Direct:integer-кодирование/декодирование
}
function Polybey(cLn:string;pLn:string;
szLn:integer;cDr:integer):string;
var
a:string;
b:integer;
begin
a:='';{строка результата}
b:=length(pLn);{длина строки}
pLn:=pLn+pLn;{повторяем пароль для упрощения кодирования/декодирования}
while length(cLn)>0 do{повторяем пока есть символы во входящей строке}
begin
if(pos(cLn[1],pLn)+cDr*szLn)>0{проверяем граничные условие}
then a:=a+pLn[pos(cLn[1],pLn)+cDr*szLn]{обычное кодирование/декодирование}
else a:=a+pLn[pos(cLn[1],pLn)+cDr*szLn+b];{кодирование/декодирование в граничных условиях}
delete(cLn,1,1);{удаляем закодированный символ}
end;
Polybey:=a;{возвращаем результат}
end;
var
currentLine,passwordLine:string;
currentSize,currentDirection:integer;
begin
{ TODO -oUser -cConsole Main : Insert code here }
{
контрольная строка пароля
passwordLine:='qwertyuiopasdfghjklzxcvbnm,.- ';}
{вводим строку пароль}
write('Please enter pasword line:');
readln(passwordLine);
{вводим количество символов в одной строке квадрата Полибия}
write('Please enter cuurrent size password line:');
readln(currentSize);
repeat
{вводим режим работы кодирования/декодирования}
repeat
write('Pease enter current dirrection[0-code|1-decode]');
readln(currentDirection);
until abs(currentDirection)<=1;
{вводим строку}
write('Please enter current line:');
readln(currentLine);
{выводим результат работы}
writeln('Result:',Polybey(currentLine,passwordLine,
currentSize,(1-2*currentDirection)),' ;');
{если нужно повторяем}
write('repeat[0-yes|1-no]');
readln(currentDirection);
until currentDirection>0;
end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
04.06.2014, 11:51
общий
Адресаты:
Немного не так, необходимо чтобы при вводе букв или слов, программа зашифровывала. Например ввела слово Мама, зашифрованное слово получается - ВАААВААА. И соответственно расшифровывала.
давно
Старший Модератор
31795
6196
05.06.2014, 11:09
общий
понятно, вечером сделаю второй вариант.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
05.06.2014, 23:14
общий
05.06.2014, 23:15
[code h=200]program q187867;

{$APPTYPE CONSOLE}

uses
SysUtils;
var
cLn,hLn,vLn,tLn:string;
pLn:array[1..5]of string;
i:integer;
begin
{ TODO -oUser -cConsole Main : Insert code here }
{квадрат Полибия}
{начальная установка данных}
pLn[1]:='abcdef';
pLn[2]:='ghijkl';
pLn[3]:='mnopqr';
pLn[4]:='stuvwx';
pLn[5]:='yz,.- ';
{вертикальная и горизонтальные строки}
vLn:='abcdef';
hLn:='abcde';
{вводим текущую строку}
write('Please enter current line:');
readln(cLn);
{кодируем строку}
tLn:='';
while length(cLn)>0 do
begin
i:=0;
repeat
inc(i);{ищем совпадение в строке квадрата}
until pos(cLn[1],pLn[i])>0;
tLn:=tLn+hLn[pos(cLn[1],pLn[i])]+vLn[i];{кодируем строку}
delete(cLn,1,1);
end;
{выводим результат}
writeln('Result code :',tLn);
readln;
{готовимся декодировать}
cLn:=tLn;
{декодирование строки}
tLn:='';
while length(cLn)>0 do
begin
tLn:=tLn+pLn[pos(cLn[2],vLn)][pos(cLn[1],hLn)];{декодируем строку}
delete(cLn,1,2);
end;
{выводим результат декодирования}
writeln('Result decode :',tLn);
readln;
end.[/code]
Второй вариант. Ответ изменять не стал.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
06.06.2014, 11:40
общий
Адресаты:
только таблица на русском у меня, а в вашем варианте на английском
давно
Старший Модератор
31795
6196
07.06.2014, 00:37
общий
Вы можете любой шрифт-алфавит подставить.
В консоле есть проблема с отображением ср1251, т.к. она работает с ср866.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа