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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2011, 11:06   #1
PeRt
 
Регистрация: 22.04.2010
Сообщений: 6
По умолчанию Шифрование "поворотной решётки"

Создать алгоритм шифрования по правилу шифра "поворотной решётки": изготавливается трафарет из прямоугольного листа бумаги размера 2m*2n клеток. В трафарете вырезано mn клеток так, что при наложении его на чистый лист того же размера четырьмя возможными способами, его вырезы полностью покрывают всю площадь листа. Буквы сообщения последовательно вписываются в вырезы трафарета (по строкам слева направо) при каждом из четырёх его возможных положений. Просто интересен этот алгоритм и как его написать .... ?
PeRt вне форума Ответить с цитированием
Старый 25.04.2011, 11:16   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) расскажите, как можно 4-рьмя способами наложить прямоугольный трафарет на прямоугольный лист ? (схемку или рисунок набросайте, плиз... - и Вам полезно будет, и для непонимающих (вроде меня) более понятно.

2) способов реализации подобного трафарета может быть много. Думаю, что банальная матрица нужного размера решает Вашу проблему. (в тех местах, где есть прорези - поместите особое значение. Например, 0 - нет прорези, 1-есть прорезь. Ну или вообще boolean значение хранить..
Поворот трафарета - это либо осуществить перенос значений в матрице по заданному алгоритму. Либо в алгоритме чтения последовательно изменять порядок обращения к данной матрице...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.04.2011, 10:55   #3
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
расскажите, как можно 4-рьмя способами наложить прямоугольный трафарет на прямоугольный лист ?
ну в принципе то можно... наложить трафарет на лист(1й вариант), повернуть трафарет на 180 в плоскости параллельной листу(2й вариант). перевернуть трафарет другой стороной и повторить. как раз 4 варианта выходит.
unbanned вне форума Ответить с цитированием
Старый 26.04.2011, 11:53   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
ну в принципе то можно... наложить трафарет на лист(1й вариант), повернуть трафарет на 180 в плоскости параллельной листу(2й вариант). перевернуть трафарет другой стороной и повторить. как раз 4 варианта выходит.
Угу. спасибо. Скорее всего, Вы правы.

ну, если честно, я тоже представлял себе такой вариант (а других я и не смог придумать - для прямоугольного трафарета!).

кстати, очевидно, что для поля размером 2m*2n прорезей в трафарете должно быть m*n. Но, имхо, этого мало. расположение всех прорезей не может быть произвольным - нужно, чтобы при поворотах они не перекрывали друг друга...
Т.е. для каждой прорези строго не должно быть прорези симметричной ей относительно центра шаблона.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.04.2011, 15:55   #5
BoozZzilla
Форумчанин
 
Аватар для BoozZzilla
 
Регистрация: 26.01.2009
Сообщений: 125
По умолчанию

насколько я понял простейший трафарет будет для поля 2х2 и будет из одной вырезаной ячейки в четверть трафарета.
По сути вопроса - помоему всё более менее просто.
Сам трафарет я представляю так: ты проходишься по четверти площади трафарета и беря рэндомное значение от 1 до 4 для каждой ячейки в зависимости от этого значения "делаешь прокол" в трафарете - либо в оригинальной четверти, либо в повёрнутой на 180 градусов, либо в перевёрнутых двух вариантах трафарета.
А дальше запомнив полученый трафарет я думаю тоже всё несложно. я бы сделал два вложенных цикла с переменными 1 и -1 и прикрутить к этому всему перебор по координатам трафарета, переменные циклов взяв как коэфициенты.

Кажись готовый алгоритм...
BoozZzilla вне форума Ответить с цитированием
Старый 26.04.2011, 17:49   #6
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

насколько я понял текст пишется подряд( построчно, слева-направо) т.е. если по очереди поставить трафарет во все 4 варианта должен получиться связный текст...

набросал в блокноте примерно следующее

* 0 0 *
0 * * 0
0 1 * 0
1 0 0 *

4х4=16

2х2=4

* 0 0 0 0 0 0 *
0 * 0 0 0 0 * 0
0 0 * 0 0 * 0 0
0 0 0 * * 0 0 0
0 0 0 1 * 0 0 0
0 0 1 0 0 * 0 0
0 1 0 0 0 0 * 0
1 0 0 0 0 0 0 *


8х8=64

4х4=16

вообщем можно мысленно все поле разбить на квадраты...
половина нужного количества проколов делается в углах этих квадратов... остальные на их сторонах. текст разбить на 4 части. и проколы соответствующие каждой части текста делать в одном выбранном положении трафарета. составить что-то типо ключа... напр 3 2 1 4. только надо условиться какое положение трафарета будет под каким номером.

матрица 8х8
ставишь первый прокол в координатах [5,4]
значит координаты 4,4;4,5;5,5 - нельзя использовать

дальше ставишь в координатах [6,3]
координаты 3,3;3,6;6,6; нельзя использовать

дальше ставишь напр 5,3 или 5,6

и т.д.

Последний раз редактировалось unbanned; 27.04.2011 в 16:23.
unbanned вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
"Двухслойное" шифрование necroant Общие вопросы C/C++ 1 16.06.2010 20:31
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. Каравай Microsoft Office Excel 13 17.02.2010 09:53
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04