Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шифрование с помощью матрицы, Помогите пожалуйста срочно очень нужно 
V
    Опции темы
Rusman
Дата 4.5.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.5.2006
Где: Пермь

Репутация: нет
Всего: нет



Здравтствуйте!
Очень прошу помогите пожалуйста если можно скорее до завтра, очень и очень нужно.
Суть такая: в одно поле Memo записывается текст далее нажимаем на кнопку и этот текст шифроуется по следующему принципу и выводится в другое поле Memo:
Сообщение вписывается в квадратную матрицу и выписывается "змейкой" в указанном порядке:

1 2 3 4 5
6 7 8 9 A
B C D E F
G H I  J K
L M N O P

Результат: 5 A 4 3 9 F K E 8 2 1 7 D J P O I C 6 B H N G M L

Трудность в алгоритме шифрования.
Не могу сделать этот алгоритм. Очень очень прошу помогите.
За ранее всем большущее СПАСИБО.    
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 4.5.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Далеко не любой текст имеет длинну корень из которой будет целым числом, придется добавлять пробелы, или еще какие нибудь спец символы. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rusman
Дата 4.5.2006, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.5.2006
Где: Пермь

Репутация: нет
Всего: нет



Я понимаю это. Просто вместо пробелов можно поставить звездочку (*). Но как это сделать я не могу сообразить. 
PM MAIL ICQ Skype   Вверх
Yanis
Дата 5.5.2006, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Сегодня только вечером смогу выложить, ели отлажу. 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Rusman
Дата 5.5.2006, 05:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.5.2006
Где: Пермь

Репутация: нет
Всего: нет



Большущее спасибо! Буду ждать.  
PM MAIL ICQ Skype   Вверх
volvo877
Дата 5.5.2006, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 14
Всего: 116



Rusman, матрицу сам заполнишь? Я задал ее константой. Вот дальнейшие действия:
Код
const
  n = 5;
const
  matrix: array[1 .. n, 1 .. n] of char =
    (
      ('1', '2', '3', '4', '5'),
      ('6', '7', '8', '9', 'A'),
      ('B', 'C', 'D', 'E', 'F'),
      ('G', 'H', 'I', 'J', 'K'),
      ('L', 'M', 'N', 'O', 'P')
    );

procedure TForm1.Button1Click(Sender: TObject);
var
  i, j, count: integer;
  s: string;
begin
  count := 0; s := '';
  i := 0; j := n;

  repeat
    inc(i);
    if j < 1 then begin inc(i); inc(j); end;
    while (i <= n) and (j <= n) do begin
      s := s + matrix[i, j];
      inc(i); inc(j); inc(count);
    end;

    dec(j);
    if i > n then begin dec(i); dec(j) end;
    while (i >= 1) and (j >= 1) do begin
      s := s + matrix[i, j];
      dec(i); dec(j); inc(count);
    end;

  until count >= sqr(n);
  memo2.text := s;
end;
 
PM MAIL   Вверх
Rusman
Дата 5.5.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.5.2006
Где: Пермь

Репутация: нет
Всего: нет



Спасибо! Пытаюсь разобраться, но что-то не получается. Я беру читаю матрицу из 1-ого поля Мемо, но ведь корень из кол-во букв  некоторого текста не получиться целым числом, нужно добавить пробелы и в пробелы вставить какие нибудь симовлы.

Добавлено @ 11:28 
Пока буду пробовать что-то делать с вариантом Yanis.
volvo877, буду ждать твоего варианта.
Всем вам огромное спасибо за помощь!

Добавлено @ 11:29 
Извините, перепутал имена. Жду вариант Yanis-а 
PM MAIL ICQ Skype   Вверх
volvo877
Дата 5.5.2006, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 14
Всего: 116



Rusman,
а ведь alexeis1, тебе об этом и говорил... Построчно заполняй матрицу, и все НЕзаполненные тобой элементы заполняй пробелами (или какими-то другими символами), а еще лучше - сначала FillChar-ом заполни всю матрицу каким-то сиволом, а потом заноси в нее буквы - все, на что не хватит букв исходной строки, останется равным заданному тобой символу.

Потом шифруй... 
PM MAIL   Вверх
Alexeis
Дата 5.5.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(volvo877 @  5.5.2006,  08:05 Найти цитируемый пост)
Rusman, матрицу сам заполнишь?

Для заполнения матрицы текстом из мемо мне код удалось написать
Код

procedure TForm1.btn1Click(Sender: TObject);
var
   a      : array of array of char;
   i, j, k: Integer;
   t, t2  : AnsiString;
   l,  sl  : Integer;

begin
  t := Memo1.Text;
  l := Length(t);
  delete(t, l-1, 2); //удаление символа конца строки
  l := Length(t);
  sl := Trunc(Sqrt(Length(t)));
  if (sl * sl) <> l
  then
    Inc(sl);

  t2 := '';
  for i := 1 to sl * sl - l
  do
    t2 := t2 + '*';

  t := t + t2;
  l := Length(t);

  setLength(a, sl + 1);
  for i := 1 to sl
  do
    setLength(a[i], sl + 1);

  k := 1;
  for i := 1 to sl
  do
    for j := 1 to sl
    do
      Begin
        a[i, j] := t[k];
        inc(k);
      end;
.........................


Добавлено @ 11:41 
А вот дальше что-то никак... 

Это сообщение отредактировал(а) alexeis1 - 5.5.2006, 11:41


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alexeis
Дата 5.5.2006, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



p.s. матрица получается по индексам volvo877. т.е. для его кода. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rusman
Дата 5.5.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.5.2006
Где: Пермь

Репутация: нет
Всего: нет



Ура! Сделал. Большое спасибо всем! Щас буду пытаться делать расшифровку. 
Еще хочу вас попросить объяснить некоторые моменты в этой программе. Сейчас я её разберу и напишу что не могу понять. Если вы можете, то пожалуйста объясните.
Спасибо за внимание! 
PM MAIL ICQ Skype   Вверх
Rusman
Дата 5.5.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.5.2006
Где: Пермь

Репутация: нет
Всего: нет



1. Что такое Trunc. 
2. Что такое Inc.
3.Что такое Until.
4. За что обозначили Count.
5. Что такое Dec. 
PM MAIL ICQ Skype   Вверх
volvo877
Дата 5.5.2006, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 14
Всего: 116



Rusman,
F1 заклинило?

Dec(X) равносильно x := x - 1
Inc(X) равносильно x := x + 1
Trunc(x) - целая часть числа Х

Repeat ... Until условие
это один из циклов (с постусловием)

Ну, а Count (как я понимаю, в моей процедуре) - это количество обработанных символов матрицы. Цикл должен продолжаться до тех пор, пока не будут обработаны Sqr(n), то есть n*n символов (другими словами - вся матрица) 
PM MAIL   Вверх
Sunr1se
Дата 5.5.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 1.5.2006

Репутация: 6
Всего: 13



1. Trunc отбрасывет от числа дробную часть
2. Inc увеличивает значение переменной на единицу
3. Until...repeat - это цикл с постусловием. Те команды, которые находятся между командами until и repeat, будут повторятся, пока верно условие (оно находится после команды until, в нашем случае это count >= sqr(n))
4. Не совсем понял вопрос.
5. Dec уменьшает значение переменной на единицу 
--------------------
IRC-канал Винграда 
PM MAIL ICQ   Вверх
Alexeis
Дата 5.5.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



 Trunc - отсечение дробной части.результат integer;

  Inc(i) - тоже что i := i + 1; для Integer; если inc(i, 3); -   i := i + 3  

  repeat  Until - опрераторные скобки цикла.
  ВЫПОЛНЯЕМ
  ..................
  ПОКА (....) НЕ БУДЕТ ИСТИНЫМ(TRUE) 
  Count - текущая позиция(индекс символа) в шифрованной строке

  Dec - обратное inc i := i - 1;  если dec(i, 3); -   i := i - 3;  
-----------------------
  
  ничего себе сколько человек отозвалось
  smile  smile  smile  smile  smile  

Это сообщение отредактировал(а) alexeis1 - 5.5.2006, 14:26


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1204 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.