• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Паскаль. Сжатие строки

ИриSka-147

Ученик
Регистрация
18 Янв 2015
Сообщения
9
Реакции
0
Баллы
0
Паскаль. Сжатие строки

Код:
 когда ввожу 1 элемент,то задача не идет...как исправить??
 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.
 
Прежде всего - будьте так любезны выложить формулировку задачи.

И еще - в соответствии с нашими Правилами, именования тем типа "Помогите!!", "Нужна помощь!", "Help!!!", "Помогите, пожалуйста" и т.п. НЕ ДОПУСКАЮТСЯ.
 
Составить процедуру "сжатия" исходной последовательности символов: каждая подпоследовательность, состоящая из нескольких вхождений одного и того же символа, заменяется на текст х(к), где х - символ, к - строка, являющаяся записью числа вхождений символа х в исходную последовательность.
 
Спасибо. И еще, если не затруднит, - подробнее о проблеме. Что значит "ввожу 1 элемент"? Первый элемент? Или вся строка состоит из одного символа? Расшифруйте, пожалуйста.
 
вся строка состоит из 1го символа
 
Хорошо, попробую выбрать время и повозиться с программой. Как получится.
 
Так, ну погонял я Вашу программу.
Всё там абсолютно правильно, и по одному символу работает прекрасно, кроме одной мелочи.
Запомните на будущее:
СТРОКОВАЯ ПЕРЕМЕННАЯ СЧИТЫВАЕТСЯ ТОЛЬКО ОПЕРАТОРОМ "Readln", НИКАКИХ "Read"!!!
А потому исправьте четвертую снизу строку с "read(s);" на "readln(s);" - и будет Вам счастье!
 
исправила ,и нет мне счастья
Так.
Ну либо Вы не то исправили, либо у Вас какой-то глючный Паскаль.
Вот что сделал я.
1. Программа:
Код:
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('Enter the string: ');
 Readln(s);
 RAR(s);
 write('Compressed string: ', s);
 ReadKey
End.
2. Результаты:
AA01.webp
AA02.webp

tehno015tehno015tehno015
 
у меня авс.net
ничего не получается
 
у меня авс.net
ничего не получается
Извините, но, как видите - программу я совсем не переделывал (кроме замены кириллицы латиницей в сообщениях и добавления останова в самом конце), однако в моём DOS Free Pascal она работает "на ура", как и должна, ибо, насколько могу судить, написана абсолютно грамотно и ошибок (ну, если не считать read/readln) не содержит.
Я уже неоднократно высказывал здесь своё мнение по поводу этого не при дамах будь сказано изделия №2 по имени АВС, думал, хоть .NET лучше, но, похоже, того же и столько же и тем же самым по тому же месту.
Ну что же, попытайтесь отладить всякими там остановами, выводом промежуточных результатов и т.п., чтобы понять, на чем эта дрянь спотыкается. Я Вам тут, к сожалению, не помощник.
 
Есть одна гипотеза. Попробуйте такой вариант:
Код:
Uses CRT;
Var
 s:string;

Function RAR(s:string):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)];
 RAR:=s1;
end;

Begin
 write('Enter the string: ');
 Readln(s);
 write('Compressed string: ', RAR(s));
 ReadKey
End.
 
Назад
Сверху