Найти ошибку (шифровка/дешифровка) - 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.
Объяснение кода листинга программы
- В начале программы подключается библиотека crt, которая предоставляет функции для работы с консолью.
- Переменные i, k и x инициализируются целочисленными значениями.
- Строка и ключ вводятся пользователем с помощью функции readln.
- В зависимости от значения переменной otvet (шифровка или дешифровка) выполняется соответствующий блок кода.
- Если otvet равен 'Ш' или 'ш', то выполняется блок кода для шифрования.
- В блоке шифрования для каждого символа строки s выполняется следующая последовательность действий:
- Считывается текущий символ строки s.
- Если символ не является пробелом, то считывается его числовое значение с помощью функции ord.
- Если полученное числовое значение меньше 255, то оно уменьшается на 32.
- Полученное числовое значение заменяется на соответствующий символ из алфавита, используя функцию chr.
- Полученный символ добавляется к ключу k.
- Если otvet равен 'Д' или 'д', то выполняется блок кода для дешифровки.
- В блоке дешифровки для каждого символа строки s выполняется следующая последовательность действий:
- Считывается текущий символ строки s.
- Если символ не является пробелом, то считывается его числовое значение с помощью функции ord.
- Если полученное числовое значение больше 224, то оно увеличивается на 32.
- Полученное числовое значение заменяется на соответствующий символ из алфавита, используя функцию chr.
- Полученный символ вычитается из ключа k.
- В конце программы выводится зашифрованная строка s.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д