Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 10.11.2018
Сообщений: 3
1

Шифр Хилла

10.11.2018, 00:31. Показов 3771. Ответов 6
Метки нет (Все метки)

Господа, пишу курсовую, тема шифр Хилла. Все компилируется, запускается, но при выводе закодированного текста выдает "ошибка времени выполнения: Индекс находится вне границ массива" в 11 строке. Не могу понять почему, подскажите пожалуйста.


Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
 str:string;
 metka, ind:integer;
label 1,2,3;
 begin
 writeln('vvedite text');
 readln(str);
 ind:=1;
 repeat 
 if ord(str[ind])=32 then metka:=1 else
 if ord(str[ind+1])=32 then metka:=2 else  metka:=3;    // ошибка здесь
 case metka of
 1: write(chr(32), chr(((16*((ord(str[ind+1])))-64)) mod(26))+64);
 
 2: write(chr((8*(ord(str[ind])-64)) mod(26)+64), chr(32));
  
 3: write (chr(((8*(ord(str[ind])-64))+(9*(ord(str[ind+1])-64))) mod(26)+64 ), chr(((9*(ord(str[ind])-64))+(16*(ord(str[ind+1])-64))) mod(26)+64 ))
  
    
  end;
  ind:=ind+1; 
  until ind>length(str);
 end.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.11.2018, 00:31
Ответы с готовыми решениями:

Шифр Хилла
Доброго времени суток, помогите, пожалуйста 1. Найти матрицу K, такую, чтобы у нее была...

Шифр Хилла
Для тех кто не знает, его суть - есть слово и ключ из букв, допустим слово "студент" а ключ...

Шифр Хилла, дешифрование
Помогите пожалуйста с шифром Хилла. Использую алфавит из 29 символов. Шифрует верно, я проверяла, а...

Шифр Хилла в делфи
Есть уже написанная программа " Шифратор" реализующая симметричный блочный алгоритм шифрования...

6
Почетный модератор
64065 / 47477 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
10.11.2018, 07:57 2
Что-то это вообще не шифр Хилла
https://ru.wikipedia.org/wiki/... 0%BB%D0%B0
Напишите что Вы делаете?
0
1671 / 978 / 402
Регистрация: 07.04.2017
Сообщений: 3,824
10.11.2018, 09:59 3
Лучший ответ Сообщение было отмечено Dikobrazzzik как решение

Решение

Pascal
1
2
  ind:=ind+1; 
  until ind>length(str);
Максимальное значение которое принимает ind это length(str).
А в строчке 11 у вас str[ind+1]. Конечно, это вызывает ошибку.
1
Почетный модератор
64065 / 47477 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
10.11.2018, 10:04 4
Можно так обмануть судьбу
Pascal
1
2
3
4
readln(str);
 str:=str+' ';
...........
until ind=length(str)-1;
0
1671 / 978 / 402
Регистрация: 07.04.2017
Сообщений: 3,824
10.11.2018, 10:15 5
А по моему не стоит приучать новичков к костылям.
Надо чтоб он сам разобрался в причине ошибки и сделал нормальное решение.
0
0 / 0 / 0
Регистрация: 10.11.2018
Сообщений: 3
10.11.2018, 12:54  [ТС] 6
Если я все правильно сделал, программа должна брать по два символа из заданного текста, производить умножения по правилу умножения матриц, и выводить обратно новый символ по новому коду.
Исправил счетчик, теперь все работает нормально.
Вложения, ожидающие проверки
Тип файла: jpg 1.jpg
Тип файла: jpg 2.jpg
0
4600 / 2300 / 2201
Регистрация: 10.12.2014
Сообщений: 8,787
10.11.2018, 16:59 7
Для русского текста
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
const ABC = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ., ?';
 
function mulMatrix(a : array of Integer; m : array [,] of Integer; modVal : Integer) : array of Integer;
begin
  SetLength(Result, a.Length);
  for var n := 0 to a.Length-1 do Result[n] := 0;
  for var col := 0 to a.Length-1 do for var row := 0 to a.Length-1 do Result[col] += m[row,col] * a[row];
  for var n := 0 to a.Length-1 do Result[n] := Result[n] mod modVal;
end;
 
function determinant(m : array [,] of Integer) : Integer;
begin
  if m.GetLength(0) = 2 then Result := m[0,0] * m[1,1] - m[0,1] * m[1,0]
  else
    begin
      Result := 0; var t : array [,] of Integer; SetLength(t, m.GetLength(0)-1, m.GetLength(0)-1);
      for var rowM := 0 to m.GetLength(0)-1 do
        begin
          var rowT := 0;
          for var row := 0 to m.GetLength(0)-1 do
            if row <> rowM then begin for var col := 1 to m.GetLength(1)-1 do t[rowT,col-1] := m[row,col]; rowT += 1; end;
          Result += m[rowM,0] * determinant(t) * (odd(rowM) ? -1 : +1);
        end;
    end;
end;
 
begin
  var key  := 'АЛЬПИНИЗМ';
  var codeKey := MatrGen(3,3, (row,col)->ABC.IndexOf(key[row*3+col+1]));
  
  var text := 'ШИФР';
  if text.Length mod 3 > 0 then text += ' '*(3 - text.Length mod 3);
  var codeText := text.Select(c->ABC.IndexOf(c)).ToArray;
  var codeBlocks := codeText.Batch(3).Select(r->r.ToArray).ToArray;
  var coded : String := '';
  for var i := 0 to codeBlocks.Length-1 do coded += mulMatrix(codeBlocks[i], codeKey, ABC.Length).Select(key->ABC[key+1]).JoinIntoString('');
  WriteLn(coded);
end.
Добавлено через 52 секунды
Источник статья на Хабре.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2018, 16:59

Шифр хилла - закомпилировать как?
Windows forms С++ помогите закомпилировать Следуя описанному выше алгоритму представлен код...

Лабораторная работа: Шифр Хилла
Составить программу с графическим интерфейсом, которая реализует Шифр Хилла

Аффинное матричное преобразование (Шифр Хилла),
Здравствуйте, господа форумчане! Столкнулся с такой задачи и прошу помощи. Если у кого есть...

Составить программу шифрования и расшифровки в Delphi по соответствующему заданию: шифр Атбаш + шифр Цезеря
Составить программу шифрования и расшифровки в Delphi по соответствующему заданию: шифр Атбаш +...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.