Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > перестановка символов


Автор: Ksen 29.5.2006, 14:44
Здрасти Всем!!
Товарищи помогите решить задачу девочке-дурочке!!!
Есть N-ое кол-во символов, например  ABCD, нужно переставить их местами, например CADB....

Не представляю как это можно сделать smile ...Если у кого есть какие-нибудь примеры реализации подобных задач, или какой-нибудь простенький алгоритм........ скиньте....плиз! 
За любое пояснение и разъяснение буду благодарна!!!!
 

Автор: skyboy 29.5.2006, 15:01
Ksen, просто случайным образом перемешать? или как?  

Автор: Ksen 29.5.2006, 15:15
Да....можно случайным образом.
Но только так, чтобы я в дальнейшем смогла эти перемешанные символы вернуть в исходную позицию, т.е. туда где они и стояли...)))

Добавлено @ 15:19 
Кстати, я тут наткнулась на криптосистемы....одна из них,  шифры перестановок мне понравилась....вроде просто, но со вкусом.....что если с помощью ее перемешать символы?!

Тогда у меня возникает немного другая проблема....как из строки символов сделать столбец? С помощью какой функции это можно осуществить? 

 

Автор: skyboy 29.5.2006, 15:34
простенький алгоритм? ок, тогда, если у тебя строка хранится в, скажем, перемнной Str:
Код

var i:byte;
     c:char;
    str:string;
.....
.....
......
for i:=1 to length(Str) div 2 do 
 begin
  c:=Str[i];
  Str[i]:=Str[i + length(Str) div 2];
  Str[i + length(Str) div 2]:=c;
 end;

Пойдёт? "АБВГ"=>"ВГАБ", "12345"=>"34125". Т.е. меняются "половинками", кроме последнего символа в случае нечетной длины строки(если строка имеет длину, не делящуюся нацело на 2, то последний символ остаётся на своём месте).
Для "восстановления" используешь тот же алгоритм, но на вход подаёшь уже изменённую строку:
"ВГАБ"=>"АБВГ", "34125"=>"12345".
Впрочем, не наши это методы - излишне просто smile Можно заюзать такой алгоритм:
Код

var i,j,k:integer;
      code:integer;
      Str:string;
      C:char;
      MaxCycles;
.....
code:=1254;
MaxCycles:=255;
.....
RandSeed:=code;
for i:=1 to MaxCycles do
 begin
  j:=trunc(length(Str)*random) + 1;
  k:=trunc(length(Str)*random) + 1;
  c:=Str[j];
  Str[j]:=Str[k;
  Str[k]:=c;
 end;

Только Randomize низзя ни в коем случае использовать. Таким макаром ты при использовании одной и той же величины Code, получаешь одинаковые последовательности чисел и для восстановления строки необходимо применить тот же алгоритм для изменённой строки...
P.S. К сожалению, "в жизни" проверить не смогу. Сообщи, если что не работает.

Добавлено @ 15:34 
Ksen, что значит -- "из строки симолов в столбец"? Это как? smile  
@15.36(+02.00)
Так тебе это для шифрования? Тогда и в самом деле - какой-нить серьёзный криптографический алгоритм надо...  

Автор: Ksen 29.5.2006, 16:02
я наверное, выразилась не совсем понятно.....посмотри "Шифры перестановки", по этой ссылочке и ты все поймешь....
http://www.nntu.sci-nnov.ru/RUS/fakyl/VECH/metod/bez_dan/lab1_2.htm
может быть, конечно, мне КАЖЕТСЯ, что это просто.....но хотябы мысль как это осуществить.....

Добавлено @ 16:04 
Я незнаю, если это можно назвать шифрованием....то да...
я хочу как-нибудь запутать символы.....в дальнейшем пользователь должен будет вводить их как пароль... 

Автор: Rennigth 29.5.2006, 16:27
Ksen, 
http://forum.vingrad.ru/index.php?showtopic=14606&unread=1&st=15&hl=xor
http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&section=774

Добавлено @ 16:28 
вообщем не стесняемся -> пользуемся поиском  smile  

Автор: Mechanic 29.5.2006, 20:20
Цитата(skyboy @  29.5.2006,  15:34 Найти цитируемый пост)
Ksen, что значит -- "из строки симолов в столбец"? Это как?   

 smile 
Просто к бумажке с числами нужно применить Rotate CW PI/2 Rad.
Или к монитору..  
А вообще, интересно, в ПЦ-совместимом компе младшие адреса памяти лежат выше старших, или левее?  smile  

Автор: skyboy 29.5.2006, 21:11
Ksen, посмотрел smile Так там туча алгоритмов. Ты какой-то конкретный имеешь в виду, или находишься "в поиске"? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)