Задача на шифрование и расшифровку текста - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Задача. Открытый текст: "ШИФРОВАНИЕ_ПЕРЕСТАНОВКОЙ". Ключ (правило перестановки): группы из 8 букв с порядковыми номерами 1, 2, ..., 8 переставить в порядок 3-8-1-5-2-7-6-4. Шифртекст: "ФНШОИАВР_СИЕЕЕРПННТВАОКО". Шифрование: (Но выдает ошибку )
Листинг программы
  1. Program shifr;
  2. const n=30;
  3. var
  4. a:array[1..n] of integer;
  5. len:integer;
  6. s, r:string;
  7. i, j, v:integer;
  8. p, key:integer;
  9. Begin
  10. write('Введите текст для шифрования: ');
  11. read(s);
  12. writeln('-------------------------------------------------');
  13. write('Введите количество цифр в ключе: ');
  14. readln(key);
  15. len:= length(s);
  16. while len mod key<>0 do
  17. begin
  18. s:=s+' ';
  19. inc(len)
  20. end;
  21. writeln('Введите ключ из ',key,' цифр: ');
  22. repeat
  23. v:=0;
  24. for i:=1 to key do
  25. begin
  26. read(p);
  27. a[i]:=p
  28. end;
  29. for i:=1 to key-1 do
  30. for j:=i+1 to key do
  31. if a[i]=a[j] then inc(v);
  32. if v<>0 then
  33. begin
  34. writeln ('Ошибка! Символы ключа не уникальны!');
  35. write('Введите ключ из ',key,' цифр: ');
  36. end
  37. until v=0;
  38. while v<>len do
  39. begin
  40. for i:=1 to key do
  41. r[i+v]:=s[a[i]+v];
  42. v:=v+key
  43. end;
  44. writeln('--------------------------------------------------');
  45. write('Зашифрованный текст: ');
  46. for i:=1 to len do
  47. write(r[i]);
  48. writeln;
  49. End.
Помогите составить программу для расшифровки

Решение задачи: «Задача на шифрование и расшифровку текста»

textual
Листинг программы
  1. const n=30;
  2. var  a,b:array[1..n] of integer;
  3.      s,s1,s2,r:string;
  4.      i, j, p, key:byte;
  5.      m:set of byte;
  6. begin
  7. writeln('Введите текст для шифрования: ');
  8. readln(s);
  9. writeln('-------------------------------------------------');
  10. write('Введите количество цифр в ключе от 2 до ',n,' key= ');
  11. readln(key);
  12. while length(s) mod key<>0 do  s:=s+' ';
  13. writeln('Введите ключ из ',key,' цифр: ');
  14. m:=[];
  15. for i:=1 to key do
  16.  begin
  17.   repeat
  18.   readln(p);
  19.   until(p in [1..key])and not(p in m);
  20.   a[i]:=p;
  21.   m:=m+[p];
  22.  end;
  23. r:='';
  24. i:=1;
  25. while i<=length(s)-key+1 do
  26.  begin
  27.   s1:=copy(s,i,key);
  28.   s2:='';
  29.   for j:=1 to key do
  30.   s2:=s2+s1[a[j]];
  31.   r:=r+s2;
  32.   i:=i+key;
  33.  end;
  34. for i:=length(r) downto 1 do
  35. if r[i]=' ' then delete(r,i,1);
  36. writeln('--------------------------------------------------');
  37. writeln('Зашифрованный текст: ');
  38. writeln(r);
  39. //создадим ключ для дешифровки
  40. for i:=1 to key do
  41.  begin
  42.   for j:=1 to key do
  43.   if a[j]=i then b[i]:=j
  44.  end;
  45. s:=r;
  46. while length(s) mod key<>0 do s:=s+' ';
  47. r:='';
  48. i:=1;
  49. while i<=length(s)-key+1 do
  50.  begin
  51.   s1:=copy(s,i,key);
  52.   s2:='';
  53.   for j:=1 to key do
  54.   s2:=s2+s1[b[j]];
  55.   r:=r+s2;
  56.   i:=i+key;
  57.  end;
  58. for i:=length(r) downto 1 do
  59. if r[i]=' ' then delete(r,i,1);
  60. writeln('Расшифрованный текст');
  61. writeln(r);
  62. End.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы