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