IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Шифрование с помощью квадрата Полибия на русском, нужна подмога
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской

Репутация: -  0  +


Привет.
Взял на сайте e volvo код задачи только для английского алфавита.
Переделать не получается на русский, помогите
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

const
TPolibius: array['1' .. '8', '1' .. '8'] of char = ( //<----ВОТ ЗДЕСЬ
('_', 'А', 'Б', 'В', 'Г','Д', 'Е', 'Ё'),
('Ж', 'З', 'И','Й','К', 'Л','М', 'Н'),
('О','П', 'Р', 'С', 'Т', 'У','Ф', 'Х'),
('Ц','Ч', 'Ш', 'Щ','Ъ', 'Ы','Ь','Э'),
('Ю', 'Я', '0', '1','2', '3', '4','5'),
('6', '7', '8', '9', '(',')', '[', ']'),
('{', '}', '.', ',', ':',';', '?', '!'),
('-', '"', '+', '=', '№','%', '*', '/')
);


var
Form1: TForm1;
s: string;

implementation

{$R *.dfm}

function PolibiusEncipher(toCode: string): string;
var
i: integer;
ix, jx: char;
s: string;
begin
s := '';
for i := 1 to length(toCode) do begin

for ix := '_' to 'Ё' do
for jx := '_' to 'Ё' do
if TPolibius[ix, jx] = toCode[ i ] then begin
s := s + ix + jx; break;
end;

end;
PolibiusEncipher := s
end;

function PolibiusDecipher(toDecode: string): string;
var
i: integer;
s: string;
begin
s := '';
i := 1;
while i <= length(toDecode) do begin
s := s + TPolibius[toDecode[ i ], toDecode[succ(i)]];
inc(i, 2);
end;
PolibiusDecipher := s
end;




procedure TForm1.Button1Click(Sender: TObject);
begin
s := PolibiusEncipher('POLIBIUS');
// writeln(s);
Memo1.lines.add(s);
Memo1.lines.add('s = '+ PolibiusDecipher(s));
end;

end.



Там где я пометил что надо написать чтобы работало для русского варианта, в оригинале там
array['A' .. 'E', 'A' .. 'E']
http://volvo71.narod.ru/faq_folder/code_text.htm
Спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Там где я пометил что надо написать чтобы работало для русского варианта
Менять надо не только там... Вот так, например:
type
Tfirst = '1' .. '8';
Tsecond = '1' .. '8';
const
TPolibius: array[Tfirst, Tsecond] of char = (
('_', 'А', 'Б', 'В', 'Г','Д', 'Е', 'Ё'),
('Ж', 'З', 'И','Й','К', 'Л','М', 'Н'),
('О','П', 'Р', 'С', 'Т', 'У','Ф', 'Х'),
('Ц','Ч', 'Ш', 'Щ','Ъ', 'Ы','Ь','Э'),
('Ю', 'Я', '0', '1','2', '3', '4','5'),
('6', '7', '8', '9', '(',')', '[', ']'),
('{', '}', '.', ',', ':',';', '?', '!'),
('-', '"', '+', '=', '№','%', '*', '/')
);

function PolibiusEncipher(toCode: string): string;
var
i: integer;
ix: Tfirst; jx: Tsecond;
s: string;
begin
s := '';
for i := 1 to length(toCode) do begin

for ix := Low(Tfirst) to High(Tfirst) do
for jx := Low(Tsecond) to High(Tsecond) do
if TPolibius[ix, jx] = toCode[ i ] then begin
s := s + ix + jx; break;
end;

end;
PolibiusEncipher := s
end;

function PolibiusDecipher(toDecode: string): string;
var
i: integer;
s: string;
begin
s := '';
i := 1;
while i <= length(toDecode) do begin
s := s + TPolibius[toDecode[ i ], toDecode[succ(i)]];
inc(i, 2);
end;
PolibiusDecipher := s
end;

procedure TForm1.Button1Click(Sender: TObject);
var s: string;
begin
s := PolibiusEncipher('ПОЛИБИЙ');
Memo1.lines.add(s);
Memo1.lines.add('s = '+ PolibiusDecipher(s));
end;
Если не нравится, что сообщение кодируется цифрами, а хочется чтоб кодировалось буквами - достаточно поменять Tfirst и Tsecond:
type
Tfirst = 'А' .. 'З';
Tsecond = 'А' .. 'З';
, и получишь желаемое. Больше ничего в программе менять не придется.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской

Репутация: -  0  +


Спасибо.
Мне ещё нужно сделать из файла текст и в UpCase переводить для шифрования, но это легко, я сделал
Вот ещё 1 условие
"Каждый символ открытого текста кодируется парой чисел – номером строки и номером столбца.
Для кодирования номера строки и номера столбца используются по 3 бита."
Как его реализовать?

Сообщение отредактировано: striker -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


Тоже на сайте volvo нашёл? smile.gif

Сообщение отредактировано: cooler -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Цитата
Для кодирования номера строки и номера столбца используются по 3 бита."

Kod:=NomerStroki or (NomerStolbtsa shl 3);
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.04.2024 12:38
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name