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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2012, 16:13   #1
sergio212
Пользователь
 
Регистрация: 29.10.2012
Сообщений: 10
По умолчанию Работа со строками-шифрование(Delphi 7)



В "открытый текст" вводится любое слово, в "ключ" два числа-первое номер st(строки), т.е какой строке будут соответствовать символы введенного слова, всего пять различных строк: st1,st2,st3,st4,st5. А st0 таблица ascii из которой выбраны символы в нормальной последовательности именно из этой строки сформировано введенное слово Привет мир!(там может быть любое слово). Второе число в ключе-это сколько символов из начала введенного слова мы хотим переместить в конец. Введя слово и ключ, нажимается кнопка "подстановка" в данном примере это число 1 т.е. символы в веденном слове будут соответствовать из st1, в моем примере П=Н, р=ш, и=o, в=к, е=м, т=б, пробел=n и т.п. Нажав на кнопку перестановка, первые символы переместятся в конец-это число 2 в ключе, т.е. переставить первые две буквы в конец, в данном примере это Нш, если ввести три то в конце будет Ншо.

Это я попытался объяснить как работает данная программа. Но теперь мне нужно дополнить эту программу функцией расшифровки, т.е. щелкнув кнопку "расшифровка" программа должна вывести расшифрованный текст, тот который я ввел в начале, в моем примере там должно быть слово "Привет мир!"

Точно знаю, чтобы работала расшифровка нужно идти в обратном направлений, т.е. сначала нужно переставить, а потом подставить.

Если вы конечно, что-нибудь поняли из моего написания, то прошу помочь с расшифровкой.

Код:
//Подстановка 
procedure TForm1.btn1Click(Sender: TObject);
var
  st0:string;
  st1:string;
  st2:string;
  st3:string;
  st4:string;
  st5:string;
  stv:string;
  n:Byte;
  nPodst:Integer;
  s1:string [1];
  st:string;
  sts:string;
  i:Byte;
  nc:Byte;
begin

//Строки пришлось сфотографировать, так как кодировка delphi не правильно отображает русский алфавит, в других приложениях.
Извините за плохое отображение(

  
  nPodst:=strToInt(Copy(edt2.Text ,1,1));
  if nPodst=1 then stv:=st1;
  if nPodst=2 then stv:=st2;
  if nPodst=3 then stv:=st3;
  if nPodst=4 then stv:=st4;
  if nPodst=5 then stv:=st5;
  st:=edt1.Text;
  n:=Length(st);
  sts:='';
  for i:=1 to n do
   begin
     s1:=Copy(st,i,1);
     nc:=Pos(s1,st0);
     sts:=sts+Copy(stv,nc,1);
   end;
  lbl3.caption:=sts;
   //btn2.Enabled:=True;
   //btn1.Enabled:=False;
end;

//Перестановка
procedure TForm1.btn2Click(Sender: TObject);
var
  st1:string;
  nPer:Integer;
  n:Byte;
  st2:string;
  sim1:string [1];
  i:Byte;
begin
  st1:=lbl3.Caption;
  n:=Length(st1);
  sim1:=Copy(edt2.Text ,2,1);
  nPer:=StrToInt(sim1); 
  for i:=1 to nPer do
    begin
      sim1:=copy(st1,1,1);
      st2:=copy(st1,2,n-1);
      st1:=st2+sim1;
    end;
  lbl3.caption:=st1;
  //btn2.Enabled:=False;
  //edt2.Enabled:=False;
end;

//Расшифровка
procedure TForm1.btn3Click(Sender: TObject);
begin
....
....
....
end;

end.

Последний раз редактировалось sergio212; 02.12.2012 в 16:19.
sergio212 вне форума Ответить с цитированием
Старый 04.12.2012, 20:23   #2
sergio212
Пользователь
 
Регистрация: 29.10.2012
Сообщений: 10
По умолчанию

Разобрался
Код:
//Расшифровка
procedure TForm1.btn3Click(Sender: TObject);
var
   //переменные для обратной перестановки
  st1:string;
  nPer:Integer;
  n:Byte;
  st2:string;
  sim1:string [1];
  i:Byte;
  //переменные для обратной подстановки
  str0:string;
  str1:string;
  str2:string;
  str3:string;
  str4:string;
  str5:string;
  stv:string; 
  amount:Byte;
  nPodst:Integer; 
  s1:string [1];
  st:string;
  sts:string;
  meter:Byte; 
  nc:Byte;

//обратная перестановка
begin
  st1:=lbl3.Caption;
  n:=Length(st1);
  sim1:=Copy(edt2.Text,2,1);
  nPer:=StrToInt(sim1);
  for i:=1 to nPer do
    begin
      sim1:=copy(st1, n,n); 
      st2:=copy(st1,1,n-1);
      st1:=sim1+st2;
    end;

//обратная подстановка
begin
  str0:=' !"#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ';
  str1:='n@F`l`/W&=" Zw,8q;l?+QG9>}Z]a]._`I?!\{ N\nN8e/m|O:C9OSVC1eEj@``< qelQ,O]6&ARr5?)VW=sCuS*?VAUXW-åÝÑöðòÍåÁÝÕÁÎýÍúÍþÁãÊëæÐæÓìÕÞîÌäÄêÉòìÝíîÛÕÌÐÙÉËøÕáÊõÑÃÌÐøÇãÞèÎÕÆ';
  str2:='t4[L7{3dcF|V?[@2$]ySdIM{iamd!P%ZRl`kw$~I8aXgDK@WX:3VbR,]nK>;ccv,nqxIE6&u2oNd<SUr@X;v@Q=L,4!{cÈâòëóÕÀ÷ìþøÙïÂÄÓÍÃÇÙûðÏÎßøÇÄÃ×ãÒùðÏîïÅëèãßÐåÖßùÐÍâúÁÚÓûíçûïÈÚþÀÂ';
  str3:='{*:unN}~m)F3<^l]S83s;2- Fnzn_r^>I>:~_g6|P~,nL3,Cx{a-Ci91a7J:QmOv4X9P4~!f`&TthWietSK8tP{:jw/af?[ýØÏÍÌÚûÎèÙàýíÂÁ×ôÖÚþÞàåàâÔ÷çêêúôÐÊÑæÔÇìÁÔÖëéêäðÕæÖíÐéñçÜâåÕÙ÷Àþè';
  str4:='N[](s=)GD8ChWY[pT[hx9@,HFv+NxuFH{<87z[EU.f|af}on:z2HAx<5Ge^[>_~: [)-Fdz=Fs(KO;tYSbBUTvXA^tjITNqØÄêðãéâÁñÀúÕÄÊ÷ÁÉâíòöúÛÃÀàÊôÖÕéðäåáÍÐ÷ùþîÖêÎüÓÚÆèÞøÙóÐÜûÄ÷úýÔåðÉ';
  str5:='jk"_;4Ly)*WqjBcF9|4PcV:kA&VPtP0zc`NQ}Gz9J#uRA.i &kWKf<cR3]pOVC]Ycz[p!QCL63wEi<>`|{te[DHLaJbRsã÷ÓïÄáÜÒÚôôÜûäàåÿÖþÏÿÎêãÆÑæËÆÐïèáÇÏËúÀìÉÄËÑðÝòÇÈÒçÛÏìÊËáÐäÞíðÜîÉ';

  nPodst:=strToInt(Copy(edt2.Text ,1,1)); 
  if nPodst=1 then stv:=str1;
  if nPodst=2 then stv:=str2;
  if nPodst=3 then stv:=str3;
  if nPodst=4 then stv:=str4;
  if nPodst=5 then stv:=str5;

  st:=st1; 
  amount:=Length(st);
  sts:='';
  for meter:=1 to amount do
   begin
     s1:=Copy(st,meter,1);
     nc:=Pos(s1,stv); 
     sts:=sts+Copy(str0,nc,1);

   end;

end;

Последний раз редактировалось sergio212; 04.12.2012 в 20:27.
sergio212 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
delphi работа со строками Reglament_ Общие вопросы Delphi 2 17.03.2012 20:18
работа со строками delphi fize Помощь студентам 22 07.01.2010 03:59
Работа со строками.(Delphi) SfSpawN Помощь студентам 1 09.06.2009 18:13
Работа с строками в Delphi. Lassard Помощь студентам 8 21.11.2008 18:27