|
Познающий
Регистрация: 27.03.2008
Сообщений: 30
Провел на форуме: 345913
Репутация:
10
|
|
приветствую..
если кто может - посмотрите этот код.. вроде ошибок быть не должно, но нету паскаля под рукой.. если где ошибки какие - поправьте пожалуйста..
это так.. курсачь мой.. немного не доделан конечно, но тут-то и нужна ваша помощь.. алгоритм шифрования - двойной квадрат Уитстона.. мне бы всё это нанести на форму в делфи, что б было что-то вроде: http://i.piccy.info/i4/b8/aa/df22afa4f5adc6e42c178ad5dfbf.png
привожу код:
uses crt;
type
ttable=array[1..7,1..5] of char;
const
list:ttable=(('а', 'б','в','г','д'),
('е','ж','з','и','к'),
('л','м','н','о','п'),
('р','с','т','у','ф'),
('х','ц','ч','ш','щ'),
('ъ','ы','ь','э','ю'),
('я','.',',',':',' '));
{Степень перемешивания, с которой сформируются исходные таблицы}
mixdepth=1000;
procedure findxy(table:ttable;c:char;var x,y:byte);
var
p,o:byte;
begin
for o:=1 to 7 do
for p:=1 to 5 do
if table[o,p]=c then
begin
x:=p;
y:=o;
exit;
end;
end;
var
table1,table2:ttable;
p,o,p2,o2:byte;
i:integer;
c:char;
s,s2:string;
begin
{Заполним таблицы}
for o:=1 to 7 do
for p:=1 to 5 do
begin
table1[o,p]:=list[o,p];
table2[o,p]:=list[o,p];
end;
{Перемешаем таблицы}
randomize;
for i:=1 to mixdepth do
begin
{мешаем первую таблицу}
o:=random(7)+1;
p:=random(5)+1;
o2:=random(7)+1;
p2:=random(5)+1;
c:=table1[o,p];
table1[o,p]:=table1[o2,p2];
table1[o2,p2]:=c;
{Мешаем вторую таблицу}
o:=random(7)+1;
p:=random(5)+1;
o2:=random(7)+1;
p2:=random(5)+1;
c:=table2[o,p];
table2[o,p]:=table2[o2,p2];
table2[o2,p2]:=c;
end;
{Выведем таблицы на экран}
clrscr;
for o:=1 to 7 do
begin
for p:=1 to 5 do write(table1[o,p]:2);
write(' | ');
for p:=1 to 5 do write(table2[o,p]:2);
writeln;
end;
writeln('Введите текст который будет зашифрован используя только символы из таблиц:');
readln(s);
if odd(length(s)) then s:=s+' '; {Если длина нечётна, добавим пробел}
{Сформируем зашифрованую строку}
i:=1;
s2:='';
while i<length(s) do
begin
findxy(table1,s[i],p,o);
findxy(table2,s[i+1],p2,o2);
s2:=s2+table2[o,p2]+table1[o2,p];
inc(i,2);
end;
{Выведем зашифрованую строку}
writeln('Зашифрованая строка выглядит так:');
writeln(s2);
end.
Последний раз редактировалось Lord NightKon; 27.03.2010 в 11:59..
|