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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2016, 08:17   #1
Лиана2016
Новичок
Джуниор
 
Регистрация: 06.05.2016
Сообщений: 1
По умолчанию реализации алгоритма кодирования длин серий.

Помогите пожалуйста описать программу реализации алгоритма кодирования длин серий.

Код:
function encode(s:string):string;
var i,k:integer; c:char;
begin
  Result:='';
  if s='' then exit;
  c:=s[1]; 
  k:=1;
  for i:=2 to length(s)+1 do
    if s[i]=c then inc(k) else
      begin
        if k>1 then Result:=Result+IntToStr(k);
        Result:=Result+c;
        c:=s[i];
        k:=1;
      end;
end;
 
function decode(s:string):string;
var i,j,c:integer;
    newS:string;
begin
i:=1;
while i <= length(s) do
  begin
    j:=i;
    while s[j] in ['0'..'9'] do inc(j);
    if j-i > 0 then
    begin
      for c:=1 to strtoint(copy(s,i,j-i)) do newS := newS + s[j];
      delete(s,i,j-i+1);
    end else
    begin
      newS := newS + s[i];
      inc(i);
    end;
  end;
  result:= newS;
end;
______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.
Лиана2016 вне форума Ответить с цитированием
Старый 06.05.2016, 09:12   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Код:
function encode(s:string):string;
var i,k:integer; c:char;
begin
Result:='';
if s='' then exit;
c:=s[1];
k:=1;
for i:=2 to length(s)+1 do
if s[i]=c then inc(k) else
 begin
  if k>1 then Result:=Result+IntToStr(k);
  Result:=Result+c;
  c:=s[i];
  k:=1;
 end;
end;

function decode(s:string):string;
var i,j,c:integer;
    s1:string;
begin
i:=1;
while i<=length(s) do
if s[i] in ['0'..'9'] then
 begin
  j:=i;
  s1:='';
  while (j<=length(s))and(s[j] in ['0'..'9']) do
   begin
    s1:=s1+s[j];
    inc(j);
   end;
  for c:=1 to strtoint(s1)-1 do
  insert(s[j],s,j);
  delete(s,i,length(s1));
  i:=i+strtoint(s1)-1;
 end
else i:=i+1;
result:=s;
end;
var s,s1:string;
begin
writeln('Введите строку символв, содержащую серии одинаковых');
readln(s);
s1:=encode(s);
writeln('Зашифрованная строка');
writeln(s1);
s:=decode(s1);
writeln('Расшифрованная строка');
writeln(s);
end.
puporev вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа для реализации арифметического кодирования в Паскаль. Lilit)) Помощь студентам 2 30.03.2012 10:42
Написать программу в Паскаль или Делфи для реализации арифметического кодирования. Lilit)) Помощь студентам 1 28.03.2012 00:44
люди ,совет... по реализации алгоритма сергей30001 Помощь студентам 1 08.02.2012 13:42
программа реализации алгоритма "Сравнение и подсчет" сортировки для АТД «Очередь» (с одной головой) bender_prog Фриланс 7 08.01.2011 01:17