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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2009, 23:09   #1
Allen Iverson
Пользователь
 
Аватар для Allen Iverson
 
Регистрация: 15.04.2009
Сообщений: 28
По умолчанию Описать функцию CompressStr(S) строкового типа,выполняющую сжатие строки S

На паскале....
Описать функцию CompressStr(S) строкового типа,выполняющую сжатие строки S по следующему правилу: каждая подстрока строки S, состоящая из более чем четырех одинакоывых символов C, заменяется текстом вида C{K}, где K - количество символов С(предпологается что S не содержит фигурных скобок { и }). Например, для строки S="bbbccccce" функция вернет строку "bbbc{5}e".

Прошу помогите...очень срочно нужно...
Allen Iverson вне форума Ответить с цитированием
Старый 22.04.2009, 23:49   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

берите решение от Min и модифицируйте под себя...
http://www.programmersforum.ru/showthread.php?t=45173
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.04.2009, 00:10   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вроде, все работает.
Код:
uses crt;
var
s : string;

function compress(s : string) : string;
var rez,buf : string;
i,k,t : integer;
c : char;
begin
rez := s;
k := 1;  { количество текущей буквы }
i := 2;   { указатель на 2-й символ строки }
t := 1;  { указатель на начало ряда }
while i<=length(rez) do  { идем по строке }
 begin
 if rez[i]=rez[i-1] then    { если текущий символ равен предыдущему... }
  inc(k)            { увеличиваем счетчик }
 else         { иначе... }
  begin
  if k>4 then   { если на счетчике больше 4 }
   begin
   c := rez[i-1];   { в c кладем символ, из которого формируется ряд }
   delete(rez,t,k);  { удаляем ряд }
   Str(k,buf);      { преобразуем k  в строку и кладем в buf }
   insert(c+'{'+buf+'}',rez,t);  { вставляем конструкцию на место ряда}
   end;

  k := 1;   { т.к. перешли к новому ряду, то обнуляем (точнее, "объединичиваем") счетчик }
  t := i;  { и запоминаем начало потенциального ряда }
  end;
 inc(i);
 end;
 if k>4 then   { а это нужно на случай, если ряд находится в конце строки }
   begin            { все то же самое }
   c := rez[i-1];
   delete(rez,t,k);
   Str(k,buf);
   insert(c+'{'+buf+'}',rez,t);
   end;
compress := rez;
end;
{---------}

begin
clrscr;
readln(s);
s := compress(s);
writeln(s);

readln;
end.
---------------
Вижу, решение Min короче )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 23.04.2009 в 00:43. Причина: добавил комменты
Sazary вне форума Ответить с цитированием
Старый 23.04.2009, 00:26   #4
Allen Iverson
Пользователь
 
Аватар для Allen Iverson
 
Регистрация: 15.04.2009
Сообщений: 28
По умолчанию

Sazary вам ОГРОМНЕЙШЕЕ СПАСИБО
Allen Iverson вне форума Ответить с цитированием
Старый 23.04.2009, 00:30   #5
Allen Iverson
Пользователь
 
Аватар для Allen Iverson
 
Регистрация: 15.04.2009
Сообщений: 28
По умолчанию

Уважаемый Sazary....простите за наглость но не могли бы вы состаить комментарии к своей программе....заранее спасибо...
Allen Iverson вне форума Ответить с цитированием
Старый 23.04.2009, 00:44   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Allen Iverson, добавил в листинг.
Только решение Min'а действительно короче.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 23.04.2009, 00:56   #7
Allen Iverson
Пользователь
 
Аватар для Allen Iverson
 
Регистрация: 15.04.2009
Сообщений: 28
По умолчанию

Sazary если можно прокомментируйте программу
Allen Iverson вне форума Ответить с цитированием
Старый 23.04.2009, 01:07   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Allen Iverson
Sazary если можно прокомментируйте программу
Случайный повтор, или я что-то не понял?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание перечислимого строкового типа с возможностью использовать как STRING Alex Cones Общие вопросы Delphi 2 21.04.2009 13:56
Как правильно описать функцию? аукшщ Общие вопросы C/C++ 2 19.01.2009 11:37
[Pascal] Описать функцию IntFileSize Катуха Помощь студентам 2 24.12.2008 17:20
Описать рекурсивную функцию Palindrom(S) логического типа Master-Sergey Помощь студентам 1 15.12.2008 19:03
Помогите описать функцию pahaig Помощь студентам 2 09.04.2007 22:28