Тема «Шифровальщик», Смесь литер
« Предыдущая тема | Следующая тема » Подписаться
кзои
Гость



Приветствую, всех. Помогите пожалуйста. У меня есть программа для шифрования текста.(вообще задание дали в ВУЗЕ)
и мне нужно заменить в ней алгоритм шифрования на вот такой вот...



1)смесь разбивается на группы по N=<число слов в тексте>
2)выделяются 1-е, 2-е и т.д. символы из каждой группы
3)подряд идущие пробелы и знаки препинания объединяются в один символ

Выглядит всё это примерно так.

Исходный текст
ПРИМЕР СОСТАВЛЕНИЯ СМЕСИ.

Результат шифрования
ПССРОМИСЕМТСЕАИРВ._Л._Е._Н._И._Я._ _.

Результат дешифровки (N=3)
1) ПСС|РОМ|ИСЕ|МТС|ЕАИ|РВ.|_Л.|_Е.|_Н.|_И.|_Я.|_ _.
2) ПРИМЕР_ _ _ _ _
СОСТАВЛЕНИЯ_
СМЕСИ…….
3) ПРИМЕР_СОСТАВЛЕНИЯ_СМЕСИ.

===================
Очень прошу мне помочь, я уже и не знаю что делать (((.
Для реализации этой задачи лучше использовать именно Delphi, а нам его не преподают ещё.
В архив входит сама программа, в которую нужно внести эти изменения и таблица (кодировочная).

Вот эта Программа
Создано 09.12.2005 21:09:22
Наверх
Гость
Гость



smile;) smile:{} smile:( smile:| smile:)
Создано 21.03.2006 21:22:46
Наверх
Дмитрий Окимов
Гость



Решил погодать головоломку древности - аж 2005 года :))
Вот решение - ядерная смесь. )
Код
procedure Explode(var a: array of string; Border, S: string);
var
    S2: string;
   i: Integer;
begin
   i  := 0;
   S2 := S + Border;
   repeat
     a[i] := Copy(S2, 0,Pos(Border, S2) - 1);
     Delete(S2, 1,Length(a[i] + Border));
     Inc(i);
   until S2 = '';
end;

function Explode_Get_count(Border, S: string):integer;
var
    S2: string;
   i,k: Integer;
begin
   i  := 0;
   S2 := S + Border;
   k:=pos(Border,S2);
   while k<>0 do begin
     Delete(S2,k,Length(Border));
     Inc(i);
     k:=pos(Border,S2);
   end;
   result:=i;
end;


function encode(s:string):string;
var i,j,sm,wm:integer;
r:array of string;
l:array of integer;
res:string;
begin
sm:=Explode_Get_count(' ',s);
setlength(r,sm);
setlength(l,sm);
Explode(r,' ',s);
wm:=0;
  for i:=0 to sm-1 do begin
    if (i<>sm-1) then r[i]:=r[i]+' ';
    l[i]:=length(r[i]);
    if (wm<l[i]) then wm:=l[i];
  end;
  for j:=1 to wm do
  for i:=0 to sm-1 do
     if (l[i]>=j) then res:=res+r[i][j] else res:=res+' ';
  result:=res;
setlength(r,0);
setlength(l,0);
end;

function decode(s:string;n:integer=3):string;
var
i,j:integer;
r:array of string;
begin
setlength(r,n);
for i:=0 to length(s)-1 do
   r[i mod n]:=r[i mod n]+s[i+1];

for i:=0 to n-1 do begin
   for j:=length(r[i]) downto 2 do if (r[i][j]=r[i][j-1]) then delete(r[i],j,1);
   result:=result+r[i];
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.text:=encode('ПРИМЕР СОСТАВЛЕНИЯ СМЕСИ.');
  Memo1.text:=Memo1.text+decode(Memo1.text);
end;


Исходники на dmtsoft.ru Сборник исходников на различных языках программирования(Си,assembler,pascal и др)
Создано 28.04.2008 19:00:38
Наверх