Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2016, 09:47   #1
Pistoletka
Пользователь
 
Регистрация: 18.09.2016
Сообщений: 13
По умолчанию Задача на расшифрование текста

Проверьте код на ошибки. Не разберусь в чем проблема.
Открытый текст: ШИФРОВАНИЕ_ПЕРЕСТАНОВКОЙ.
Ключи: k1 5-3-1-2-4-6; k2 4-2-3-1.
Матрица из четырех столбцов и шести строк. Запись по строкам осуществляется в соответствии с ключом k1, а чте-
ние по столбцам – в соответствии с ключом k2
Шифртекст: "ПСНОРЙЕРВАИК_ЕАНФОИЕОТШВ".

Код:
Program rasshifr;
const n=10;
var
 text, dtext:string;
 c:char;
 key1, key2:array[1..n] of integer;
 textmatr:array[1..6,1..4] of string;
 i, j, v, len:integer;
Begin
 write('Введите текст для шифрования: ');
 read(text);
 writeln('-------------------------------------------------');
 len:=length(text);
 If len=24 then
  begin
   writeln('Введите первый ключ из 6 цифр: ');
   repeat
    v:=0;
    for i:=1 to 6 do
     begin
      read(c);
      key1[i]:=c
     end;
   for i:=1 to 5 do
    for j:=i+1 to 6 do
     if key1[i]=key1[j] then inc(v);
     if v<>0 then
      begin
       writeln ('Ошибка! Символы ключа не уникальны!');
       writeln('Введите первый ключ из 6 цифр: ');
      end
    until v=0;
    for j:=1 to 4 do
     for i:=1 to 6 do
      textmatr[i,key2[j]]:=dtext[(j-1)*6+i]; 
      text:='';
    for i:=1 to 6 do
     for j:=1 to 4 do
      text:=text+textmatr[key1[i],j];
   writeln('Расшифрованный текст:',' ',text)
  end
 else writeln('Неверно')
 End.
Pistoletka вне форума Ответить с цитированием
Старый 19.09.2016, 10:23   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
textmatr[i,key2[j]]:=dtext[(j-1)*6+i];
А где заполнение dtext ?

Код:
 textmatr:array[1..6,1..4] of string;
в матрице заполняются не строки, а символы(отдельные буквы), поэтому лучше было бы
Код:
 textmatr:array[1..6,1..4] of char;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 19.09.2016, 10:37   #3
Pistoletka
Пользователь
 
Регистрация: 18.09.2016
Сообщений: 13
По умолчанию

Цитата:
key1[i]:=c
У меня в этой строке возникает ошибка: Нельзя преобразовать тип char к integer.
Pistoletka вне форума Ответить с цитированием
Старый 19.09.2016, 11:03   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Функция Ord
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.09.2016, 11:23   #5
Pistoletka
Пользователь
 
Регистрация: 18.09.2016
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Функция Ord
Программа после ввода ключа зацикливается.
Pistoletka вне форума Ответить с цитированием
Старый 19.09.2016, 11:43   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Функция Ord
TC нужно именно введенное значение.
Ключи являются ЧИСЛОВЫМИ значениями. 1..6 1..4
Цитата:
Ключи: k1 5-3-1-2-4-6; k2 4-2-3-1.
key[i]:=strtoint(c);//val(c);???
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 19.09.2016, 11:46   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Pistoletka Посмотреть сообщение
Программа после ввода ключа зацикливается.
вы исправили ошибки, про которые Вам сказали?
dtext заполняется? или Вы переписали алгоритм?
Покажите код, который получился после исправлений?
И скажите, какой у Вас Паскаль?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.09.2016, 16:06   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
   repeat
     writeln('Введите первый ключ из 6 цифр: ');
     readln(key1[1], key1[2], key1[3], key1[4], key1[5], key1[6]);
     v:=0;
     for i:=1 to 5 do
     for j:=i+1 to 6 do
       if key1[i]=key1[j] then inc(v);
     if v<>0 then writeln ('Ошибка! Символы ключа не уникальны!');
   until v=0;
про ReadLn
и еще раз ReadLn
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 19.09.2016, 16:48   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

evg_m, годный код!
но я бы туда же добавил ещё проверку на то, что key[i] - это цифры.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.09.2016, 21:41   #10
Pistoletka
Пользователь
 
Регистрация: 18.09.2016
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
evg_m, годный код!
но я бы туда же добавил ещё проверку на то, что key[i] - это цифры.
Вот код, ошибка labrab2.pas(25) : Нельзя преобразовать тип string к array [1..6] of array [1..4] of char
Код:
Program rasshfr;
const n=10;
var
 text, dtext:string;

 key1, key2:array[1..n] of integer;
 textmatr:array[1..6,1..4] of char;
 i, j, v, len:integer;
Begin
 write('Введите текст для шифрования: ');
 read(text);
 writeln('-------------------------------------------------');
 len:=length(text);
 If len=24 then
  begin
   repeat
     writeln('Введите первый ключ из 6 цифр: ');
     readln(key1[1], key1[2], key1[3], key1[4], key1[5], key1[6]);
     v:=0;
     for i:=1 to 5 do
     for j:=i+1 to 6 do
       if key1[i]=key1[j] then inc(v);
     if v<>0 then writeln ('Ошибка! Символы ключа не уникальны!');
   until v=0;
    textmatr:=dtext;
    for j:=1 to 4 do
     for i:=1 to 6 do
      textmatr[i,key2[j]]:=dtext[(j-1)*6+i]; 
      text:='';
    for i:=1 to 6 do
     for j:=1 to 4 do
      text:=text+textmatr[key1[i],j];
   writeln('Расшифрованный текст:',' ',text)
  end
 else writeln('Неверно')
 End.
Pistoletka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на шифрование текста Pistoletka Паскаль, Turbo Pascal, PascalABC.NET 3 18.09.2016 20:54
Шифрование и расшифрование DES Nika1997 Общие вопросы Delphi 3 01.12.2015 11:04
расшифрование кода во время исполнения xqr Безопасность, Шифрование 9 12.05.2015 19:40
Алгоритм АЕS шифрование, расшифрование max38934 Win Api 11 27.05.2009 22:42
расшифрование текста с помощью генератора ПСЧ MARGO Помощь студентам 0 30.11.2007 19:11