Добавить меню выбора режима шифрование, расшифровка. Проверку цифр ( если отрицательное число-ошибка) - Pascal ABC

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

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

Добавить меню выбора режима шифрование, расшифровка. Проверку цифр ( если отрицательное число-ошибка).И если можно еще комментарии к программе
Листинг программы
  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.

Решение задачи: «Добавить меню выбора режима шифрование, расшифровка. Проверку цифр ( если отрицательное число-ошибка)»

textual
Листинг программы
  1. const n=30;
  2. var a,b:array[1..n] of integer;
  3.     s,s1,s2,r,ch:string;
  4.     i, j, p, key,k:integer;
  5.     m:set of byte;
  6.     c:char;
  7. begin
  8. r:='';
  9. repeat
  10. cls;
  11. writeln('Выберите действие');
  12. writeln('1-зашифровать текст');
  13. writeln('2-расшифровать текст');
  14. writeln('другое - выход');
  15. readln(c);
  16. case c of
  17. '1':begin
  18.     cls;
  19.     writeln('Введите текст для шифрования: ');
  20.     readln(s);
  21.     repeat
  22.     write('Введите количество цифр в ключе от 2 до ',n,' key= ');
  23.     readln(ch);
  24.     val(ch,key,k);
  25.     until (k=0)and(key in [1..n]); //если число и в интервале 1..n
  26.     while length(s) mod key<>0 do s:=s+' ';
  27.     writeln('Введите ключ из неповторяющихся чисел от 1 до ',key,' : ');
  28.     m:=[];
  29.     for i:=1 to key do
  30.      begin
  31.       repeat
  32.       write('a[',i,']=');
  33.       readln(ch);
  34.       val(ch,p,k);
  35.       until(k=0)and(p in [1..key])and not(p in m);
  36.      a[i]:=p;
  37.      m:=m+[p];
  38.     end;
  39.    i:=1;
  40.   while i<=length(s)-key+1 do
  41.    begin
  42.     s1:=copy(s,i,key);
  43.     s2:='';
  44.     for j:=1 to key do
  45.     s2:=s2+s1[a[j]];
  46.     r:=r+s2;
  47.     i:=i+key;
  48.    end;
  49.   for i:=length(r) downto 1 do
  50.   if r[i]=' ' then delete(r,i,1);
  51.   writeln('Зашифрованный текст: ');
  52.   writeln(r);
  53.   write('Нажмите Enter');
  54.   readln;
  55.  end;
  56. '2':begin
  57.      cls;
  58.      if r='' then  writeln('Зашифрованный текст еще не создан, вернитесь к пункту 1')
  59.      else
  60.       begin
  61.       //создадим ключ для дешифровки
  62.       for i:=1 to key do
  63.        begin
  64.         for j:=1 to key do
  65.         if a[j]=i then b[i]:=j
  66.        end;
  67.       s:=r;
  68.       while length(s) mod key<>0 do s:=s+' ';
  69.       r:='';
  70.       i:=1;
  71.       while i<=length(s)-key+1 do
  72.        begin
  73.         s1:=copy(s,i,key);
  74.         s2:='';
  75.         for j:=1 to key do
  76.         s2:=s2+s1[b[j]];
  77.         r:=r+s2;
  78.         i:=i+key;
  79.        end;
  80.       for i:=length(r) downto 1 do
  81.       if r[i]=' ' then delete(r,i,1);
  82.       writeln('Расшифрованный текст');
  83.       writeln(r);
  84.      end;
  85.     write('Нажмите Enter');
  86.     readln;
  87.   end;
  88.  else
  89.   begin
  90.    cls;
  91.    writeln('Программа завершена');
  92.    exit;
  93.   end;
  94. end;
  95. until not(c in ['1','2']);
  96. End.

Объяснение кода листинга программы

  1. Создается переменная n со значением 30.
  2. Создается массив a и b со 30 элементами типа integer.
  3. Создаются строки s, s1, s2, r, ch.
  4. Создается множество m типа set of byte.
  5. Создается переменная c типа char.
  6. В цикле repeat выполняется следующее:
    • Выводится сообщение о выборе действия.
    • Считывается значение c.
  7. В блоке case выполняется следующее:
    • Если c равно '1', то:
      • Выводится сообщение о вводе текста для шифрования.
      • Считывается значение s.
      • Повторно запрашивается количество цифр в ключе от 2 до n.
      • Считывается значение ch.
      • Проверяется, что введенное значение ch является неповторяющимся числом от 1 до n.
      • Записывается значение ch в массив a.
      • Создается новый массив m и записывается в него значение ch.
      • Увеличивается значение i на key.
      • Пока длина s не превышает key и s не равна пустой строке, то:
      • Выводится подстрока s начиная с индекса i и заканчивая индексом i+key.
      • Записывается значение s в r.
      • Увеличивается значение i на key.
    • Если c равно '2', то:
      • Выводится сообщение о вводе текста для расшифровки.
      • Считывается значение s.
      • Повторно запрашивается ключ для расшифровки.
      • Создается новый массив b и записывается в него значение s.
      • Записывается значение s в r.
      • Пока длина s не превышает key и s не равна пустой строке, то:
      • Выводится подстрока s начиная с индекса i и заканчивая индексом i+key.
      • Записывается значение s в r.
      • Увеличивается значение i на key.
  8. В цикле while выполняется следующее:
    • Если r равно пустой строке, то выводится сообщение о том, что зашифрованный текст еще не создан, и пользователю предлагается вернуться к пункту 1.
    • Иначе, то:
      • Выводится сообщение о расшифрованном тексте.
      • Выводится расшифрованный текст.
      • Выводится сообщение Нажмите Enter.
      • Считывается символ Enter.
  9. В блоке for выполняется следующее:
    • Если r[i] равно пробелу, то удаляется этот символ из строки r.
  10. Программа завершается.

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


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

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

14   голосов , оценка 3.714 из 5

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

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

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