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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2015, 19:51   #1
ИриSка-147
 
Регистрация: 16.01.2015
Сообщений: 8
По умолчанию Составить процедуру "сжатия" исходной последовательности символов (Паскаль). Помогите пожалуйста исправить программу

Индекс находится вне границ массива
Код:
program Task464;
uses crt;
var
   s: string;

procedure RAR(var s: string);
var
   s1, s2: string;
   i, j, k: integer;
begin
   s1:='';
   i := 1;
   while i <= length(s)-1 do begin
      if s[i] = s[i + 1] then begin
         k:= 1;
         j:= i;
         repeat
             k:= k+1;
             j:= j+1;
        
         until s[j]<>s[j+1];
         str(k, s2);
         s1:= s1 + s[i] + '('+ s2 +')';
         i:= i + k;
      end
      else begin
         s1:= s1 + s[i];
         i:=i+1;
      end;
   end;
       if s[length(s)] <> s[length(s) - 1] then
         s1:= s1 + s[length(s)];
   s:=s1;
end;
begin
   write('Введите строку: ');
   read(s);
   RAR(s);
   write('Сжатая строка: ', s);
end.

Последний раз редактировалось Stilet; 16.01.2015 в 20:31.
ИриSка-147 вне форума Ответить с цитированием
Старый 16.01.2015, 20:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Как звучит задание? Реализовать алгорим сжатия RLE?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.01.2015, 21:36   #3
ИриSка-147
 
Регистрация: 16.01.2015
Сообщений: 8
По умолчанию

Составить процедуру "сжатия" исходной последовательности символов: каждая подпоследовательность ,состоящая из нескольких вхождений одного и того же символа, заменяется на текст х(к),где х-символ, к-строка, являющаяся записью числа вхождений символа х в исходную последовательность

Последний раз редактировалось Stilet; 16.01.2015 в 21:50.
ИриSка-147 вне форума Ответить с цитированием
Старый 16.01.2015, 21:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну да. Походу RLE...
Давай попробую подсказать своим примером
Код:
program Project1;

var s,d,v:string;i,j:integer;
begin
  s:='Hello goooooogle world'; d:='';
  i:=1;while i<Length(s) do begin
    j:=0; while ((j+i)<Length(s))and(s[i]=s[j+i]) do inc(j);
    if j>1 then begin 
      Str(j,v); 
      d:=d+s[i]+'('+v+')'; 
      inc(i,j-1); 
    end else 
      d:=d+s[i];
    inc(i);
  end; d:=d+s[i];
  writeln(d); readln;
end.
Надеюсь все понятно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.01.2015, 19:01   #5
ИриSка-147
 
Регистрация: 16.01.2015
Сообщений: 8
По умолчанию

да,все понятно,спасибо)

хотя нет,объясните пожалуйста эту строчку: d:=d+s[i]+'('+v+')';

Последний раз редактировалось Stilet; 17.01.2015 в 20:00.
ИриSка-147 вне форума Ответить с цитированием
Старый 17.01.2015, 20:01   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот так новость О_о
У тебя же в коде такая строка есть, или то что выше представлено не ты писала?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.01.2015, 15:09   #7
ИриSка-147
 
Регистрация: 16.01.2015
Сообщений: 8
По умолчанию

я уже поняла))))теперь если вводим строку из одного символа,то задача не идет
ИриSка-147 вне форума Ответить с цитированием
Старый 19.01.2015, 15:13   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Опа! А один символ то не сжимается...
Кстати, в моем примере даже один символ должен вывестись на экран...
Или нет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.01.2015, 15:45   #9
ИриSка-147
 
Регистрация: 16.01.2015
Сообщений: 8
По умолчанию

я исправила, вот что получилось:
Код:
program Task464;
uses crt;
var
   s: string;

procedure RAR(var s: string);
var
   s1, s2: string;
   i, j: integer;
begin
s1:='';
i:=1;
while i<Length(s) do begin
    j:=0;
    while ((j+i)<Length(s))and(s[i]=s[j+i]) do inc(j);
    if j>1 then begin 
      Str(j,s2); 
      s1:=s1+s[i]+'('+s2+')'; 
      inc(i,j-1); 
    end else 
      s1:=s1+s[i];
    inc(i);
  end;
   if s[length(s)] <> s[length(s) - 1] then
         s1:= s1 + s[length(s)];
   s:=s1;
end;
begin
   write('Введите строку: ');
   read(s);
   RAR(s);
   write('Сжатая строка: ', s);
end.
она не идет для одного символа

Последний раз редактировалось Stilet; 19.01.2015 в 15:54.
ИриSка-147 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
паскаль.Используя готовую процедуру sort_file ,составить программу сортировки afro13 Помощь студентам 1 09.12.2012 22:13
Составить строку символов, лексико-графически упорядочив слова исходной строки и разделив их пробелами (С++) trum Помощь студентам 0 20.03.2012 01:01
Помогите пожалуйста мне составить программу паскаль! А то я уже сутки сижу над ней! рома холодцов Помощь студентам 2 20.01.2009 21:00
Пожалуйста,помогите составить программу задачи на языке Турбо Паскаль-задача на функцию Jan Помощь студентам 1 07.01.2009 19:39
Помогите пожалуйста исправить подправить процедуру (строки) Rumus Помощь студентам 5 02.07.2008 16:50