Найти ошибку (шифровка/дешифровка) - Pascal ABC

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

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

Задание написать шифровку/дешифровку некоторой строки методом сдвига (шифр Цезаря) Спустя 2 часа размышлений и попыток вывести хоть что-нибудь, получилось это:
но ввиду того, что <ord('я') у меня берутся и символы, которые не являются буквами иногда получается на выводе не только набор букв, но и набор букв, содержащий #, и пр. А так же по поводу дешифровки. предполагаю, что таким образом он вернет мне обратно значение. Но что-то как-то не очень.. then s[i] := chr(ord(s[i])-n +32) else s[i] := chr((ord(s[i])-n + 32)mod 32);

Решение задачи: «Найти ошибку (шифровка/дешифровка)»

textual
Листинг программы
uses crt;
var
 i,k,x:integer;
 s:string;
 otvet,d:char;
Begin
 write('Будем шифровать (Ш) или дешифровать (Д)? ');
  readln(otvet);
 if (otvet='Ш') or (otvet='ш') then
  Begin
 {Настройки}
 write('Введите строку: ');
  readln(s);
 write('Введите ключ: ');
  readln(k);
 write('Направление ключа: (П/Л) ');
  readln(otvet);
 if (otvet='П') or (otvet='п') then
  Begin
   for i:=1 to length(s) do
    Begin
     if s[i]<>' ' then
      Begin
       x:=ord(s[i]);
       if x+3>255 then x:=x-32;
       s[i]:=chr(x+k);
      end;
    end;
  end;
 if (otvet='Л') or (otvet='л') then
  Begin
   for i:=1 to length(s) do
    Begin
     if s[i]<>' ' then
      Begin
       x:=ord(s[i]);
       if x-3<224 then x:=x+32;
       s[i]:=chr(x-k);
      end;
    end;
  end;
 end;
if (otvet='Д') or (otvet='д') then
 Begin
   {Настройки}
 write('Введите строку: ');
  readln(s);
 write('Введите ключ: ');
  readln(k);
 write('Направление ключа: (П/Л) ');
  readln(otvet);
  if (otvet='П') or (otvet='п') then
   Begin
   for i:=1 to length(s) do
    Begin
     if s[i]<>' ' then
      Begin
       x:=ord(s[i]);
       if x-3<224 then x:=x+32;
       s[i]:=chr(x-k);
      end;
    end;
  end;
 if (otvet='Л') or (otvet='л') then
  Begin
   for i:=1 to length(s) do
    Begin
     if s[i]<>' ' then
      Begin
       x:=ord(s[i]);
       if x+3>255 then x:=x-32;
       s[i]:=chr(x+k);
      end;
    end;
  end;
 end;
write(s);
end.

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

  1. В начале программы подключается библиотека crt, которая предоставляет функции для работы с консолью.
  2. Переменные i, k и x инициализируются целочисленными значениями.
  3. Строка и ключ вводятся пользователем с помощью функции readln.
  4. В зависимости от значения переменной otvet (шифровка или дешифровка) выполняется соответствующий блок кода.
  5. Если otvet равен 'Ш' или 'ш', то выполняется блок кода для шифрования.
  6. В блоке шифрования для каждого символа строки s выполняется следующая последовательность действий:
    • Считывается текущий символ строки s.
    • Если символ не является пробелом, то считывается его числовое значение с помощью функции ord.
    • Если полученное числовое значение меньше 255, то оно уменьшается на 32.
    • Полученное числовое значение заменяется на соответствующий символ из алфавита, используя функцию chr.
    • Полученный символ добавляется к ключу k.
  7. Если otvet равен 'Д' или 'д', то выполняется блок кода для дешифровки.
  8. В блоке дешифровки для каждого символа строки s выполняется следующая последовательность действий:
    • Считывается текущий символ строки s.
    • Если символ не является пробелом, то считывается его числовое значение с помощью функции ord.
    • Если полученное числовое значение больше 224, то оно увеличивается на 32.
    • Полученное числовое значение заменяется на соответствующий символ из алфавита, используя функцию chr.
    • Полученный символ вычитается из ключа k.
  9. В конце программы выводится зашифрованная строка s.

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


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

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

11   голосов , оценка 3.909 из 5
Похожие ответы