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

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

  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
Похожие ответы