Лидеры рейтинга

ID: 226425

Konstantin Shvetski

Мастер-Эксперт

927

Россия, Северодвинск


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

548

Россия, пос. Теплоозёрск, ЕАО


ID: 401284

Михаил Александров

Академик

354

Россия, Санкт-Петербург


ID: 137394

Megaloman

Мастер-Эксперт

312

Беларусь, Гомель


ID: 400669

epimkin

Профессионал

275


ID: 400484

solowey

Профессор

73


ID: 401888

puporev

Профессор

53

Россия, Пермский край


8.1.6

02.01.2021

JS: 2.2.2
CSS: 4.2.0
jQuery: 3.5.1


 

Создание программ на языках Pascal, Delphi и Lazarus.

Администратор раздела: Зенченко Константин Николаевич (Старший модератор)


Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 251
Gluck
Статус: 6-й класс
Рейтинг: 222
puporev
Статус: Профессор
Рейтинг: 53
 

Перейти к консультации №:
 

Консультация онлайн # 199674
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: JonMoxley (Посетитель)
Дата: 21.11.2020, 10:23
Поступило ответов: 1

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Помогите зашифровать слово с помощью одиночная перестановка по ключу программа есть но она криво расшифровывает

Код (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.

Последнее редактирование 22.11.2020, 16:58 Зенченко Константин Николаевич (Старший модератор)

Состояние: Консультация закрыта

Ответ # 280381 от puporev (Профессор)

Здравствуйте, 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.


Консультировал: puporev (Профессор)
Дата отправки: 21.11.2020, 10:53

Рейтинг ответа:

+1

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 199674

JonMoxley

Посетитель

ID: 403446

1

= общий = |  21.11.2020, 10:23 |  цитировать |  профиль |  личное сообщение

это на паскале

Зенченко Константин Николаевич

Старший модератор

ID: 31795

2

= общий = |  22.11.2020, 20:21 |  цитировать |  профиль |  личное сообщение

Цитата: JonMoxley
это на паскале

pascal 100%
ABC, ABC.net либо FREE
закоментируйте строчки {//. . . }
и будет Вам удача!

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

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