| |
Тема «Шифровальщик», Смесь литер |
|
|
|
кзои Гость
|
Приветствую, всех. Помогите пожалуйста. У меня есть программа для шифрования текста.(вообще задание дали в ВУЗЕ)
и мне нужно заменить в ней алгоритм шифрования на вот такой вот...
1)смесь разбивается на группы по N=<число слов в тексте>
2)выделяются 1-е, 2-е и т.д. символы из каждой группы
3)подряд идущие пробелы и знаки препинания объединяются в один символ
Выглядит всё это примерно так.
Исходный текст
ПРИМЕР СОСТАВЛЕНИЯ СМЕСИ.
Результат шифрования
ПССРОМИСЕМТСЕАИРВ._Л._Е._Н._И._Я._ _.
Результат дешифровки (N=3)
1) ПСС|РОМ|ИСЕ|МТС|ЕАИ|РВ.|_Л.|_Е.|_Н.|_И.|_Я.|_ _.
2) ПРИМЕР_ _ _ _ _
СОСТАВЛЕНИЯ_
СМЕСИ…….
3) ПРИМЕР_СОСТАВЛЕНИЯ_СМЕСИ.
===================
Очень прошу мне помочь, я уже и не знаю что делать (((.
Для реализации этой задачи лучше использовать именно Delphi, а нам его не преподают ещё.
В архив входит сама программа, в которую нужно внести эти изменения и таблица (кодировочная).
Вот эта Программа
|
|
Создано 09.12.2005 21:09:22
|
|
|
Гость Гость
|
|
|
Создано 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
|
|
|
|
|