Консультация № 199674
21.11.2020, 10:23
0.00 руб.
22.11.2020, 16:58
0 3 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Помогите зашифровать слово с помощью одиночная перестановка по ключу программа есть но она криво расшифровывает

[code lang=pascal]var st,kl,kk:string;
t,tt:array[1..10,1..10] of char;
n,m,i,j,k:byte;
x:char;
begin
st:='МАЗУРКЕВИЧ ПЕТР';
kl:='СОБАКА';
kk:=kl;
n:=6;
m:=length(st)div n ;
k:=0;
for j:=1 to n do
for i:=1 to m do
begin
inc(k);
if st[k]=' ' then st[k]:='_';
t[i,j]:=st[k];
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if kk[i]>kk[j] then
begin
x:=kk[i];
kk[i]:=kk[j];
kk[j]:=x;
for k:=1 to m do
begin
x:=t[k,i];
t[k,i]:=t[k,j];
t[k,j]:=x;
end;
end;
writeln('Зашифрованное сообщение');
for i:=1 to m do
for j:=1 to n do
write(t[i,j]);
writeln;
for i:=1 to n do
for j:=1 to n do
if kk[j]=kl[i] then
for k:=1 to m do
tt[k,i]:=t[k,j];
writeln('Расшифрованное сообщение');
k:=0;
for j:=1 to n do
for i:=1 to m do
begin
k:=k+1;
write(tt[i,j]);
end;
end.[/code]

Обсуждение

давно
Посетитель
403446
21
21.11.2020, 10:23
общий
это на паскале
давно
Профессор
401888
1232
21.11.2020, 10:53
общий
это ответ
Здравствуйте, JonMoxley!
Код:
var st,kl,kk:string;
t,tt:array[1..10,1..10] of char;
n,m,i,j,k:byte;
x:char;
begin
st:='МАЗУРКЕВИЧ ПЕТР';
writeln(st);
kl:='СКАНЕР';//нужно чтобы ключ состоял из разных букв
kk:=kl;
n:=6;
while length(st) mod n<>0 do
st:=st+' ';
m:=length(st)div n ;
k:=0;
for j:=1 to n do
for i:=1 to m do
begin
inc(k);
// if st[k]=' ' then st[k]:='_'; это лучше убрать
//делалось для конкретного случая чтобы видеть "пробел" в начале строки
t[i,j]:=st[k];
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if kk[i]>kk[j] then
begin
x:=kk[i];
kk[i]:=kk[j];
kk[j]:=x;
for k:=1 to m do
begin
x:=t[k,i];
t[k,i]:=t[k,j];
t[k,j]:=x;
end;
end;
writeln('Зашифрованное сообщение');
for i:=1 to m do
for j:=1 to n do
write(t[i,j]);
writeln;
for i:=1 to n do
for j:=1 to n do
if kk[j]=kl[i] then
for k:=1 to m do
tt[k,i]:=t[k,j];
writeln('Расшифрованное сообщение');
k:=0;
kk:=''; //составим расшифрованную строку
for j:=1 to n do
for i:=1 to m do
begin
k:=k+1;
kk:=kk+tt[i,j];
end;
while kk[length(kk)]=' ' do delete(kk,length(kk),1);//уберем добавленные пробелы
write(kk)
end.
давно
Старший Модератор
31795
6196
22.11.2020, 20:21
общий
Цитата: JonMoxley
это на паскале

pascal 100%
ABC, ABC.net либо FREE
закоментируйте строчки {//. . . }
и будет Вам удача!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа