Добавить меню выбора режима шифрование, расшифровка. Проверку цифр ( если отрицательное число-ошибка) - Pascal ABC
Формулировка задачи:
Добавить меню выбора режима шифрование, расшифровка. Проверку цифр ( если отрицательное число-ошибка).И если можно еще комментарии к программе
Решение задачи: «Добавить меню выбора режима шифрование, расшифровка. Проверку цифр ( если отрицательное число-ошибка)»
textual
Листинг программы
const n=30; var a,b:array[1..n] of integer; s,s1,s2,r,ch:string; i, j, p, key,k:integer; m:set of byte; c:char; begin r:=''; repeat cls; writeln('Выберите действие'); writeln('1-зашифровать текст'); writeln('2-расшифровать текст'); writeln('другое - выход'); readln(c); case c of '1':begin cls; writeln('Введите текст для шифрования: '); readln(s); repeat write('Введите количество цифр в ключе от 2 до ',n,' key= '); readln(ch); val(ch,key,k); until (k=0)and(key in [1..n]); //если число и в интервале 1..n while length(s) mod key<>0 do s:=s+' '; writeln('Введите ключ из неповторяющихся чисел от 1 до ',key,' : '); m:=[]; for i:=1 to key do begin repeat write('a[',i,']='); readln(ch); val(ch,p,k); until(k=0)and(p in [1..key])and not(p in m); a[i]:=p; m:=m+[p]; end; i:=1; while i<=length(s)-key+1 do begin s1:=copy(s,i,key); s2:=''; for j:=1 to key do s2:=s2+s1[a[j]]; r:=r+s2; i:=i+key; end; for i:=length(r) downto 1 do if r[i]=' ' then delete(r,i,1); writeln('Зашифрованный текст: '); writeln(r); write('Нажмите Enter'); readln; end; '2':begin cls; if r='' then writeln('Зашифрованный текст еще не создан, вернитесь к пункту 1') else begin //создадим ключ для дешифровки for i:=1 to key do begin for j:=1 to key do if a[j]=i then b[i]:=j end; s:=r; while length(s) mod key<>0 do s:=s+' '; r:=''; i:=1; while i<=length(s)-key+1 do begin s1:=copy(s,i,key); s2:=''; for j:=1 to key do s2:=s2+s1[b[j]]; r:=r+s2; i:=i+key; end; for i:=length(r) downto 1 do if r[i]=' ' then delete(r,i,1); writeln('Расшифрованный текст'); writeln(r); end; write('Нажмите Enter'); readln; end; else begin cls; writeln('Программа завершена'); exit; end; end; until not(c in ['1','2']); End.
Объяснение кода листинга программы
- Создается переменная
n
со значением 30. - Создается массив
a
иb
со 30 элементами типаinteger
. - Создаются строки
s
,s1
,s2
,r
,ch
. - Создается множество
m
типаset of byte
. - Создается переменная
c
типаchar
. - В цикле
repeat
выполняется следующее:- Выводится сообщение о выборе действия.
- Считывается значение
c
.
- В блоке
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
.
- Если
- В цикле
while
выполняется следующее:- Если
r
равно пустой строке, то выводится сообщение о том, что зашифрованный текст еще не создан, и пользователю предлагается вернуться к пункту 1. - Иначе, то:
- Выводится сообщение о расшифрованном тексте.
- Выводится расшифрованный текст.
- Выводится сообщение
Нажмите Enter
. - Считывается символ
Enter
.
- Если
- В блоке
for
выполняется следующее:- Если
r[i]
равно пробелу, то удаляется этот символ из строкиr
.
- Если
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д