Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Паскаль. Сжатие строки (http://www.tehnari.ru/f41/t100678/)

ИриSka-147 19.01.2015 15:04

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


 когда ввожу 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.


Vladimir_S 19.01.2015 15:09

Прежде всего - будьте так любезны выложить формулировку задачи.

И еще - в соответствии с нашими Правилами, именования тем типа "Помогите!!", "Нужна помощь!", "Help!!!", "Помогите, пожалуйста" и т.п. НЕ ДОПУСКАЮТСЯ.

ИриSka-147 19.01.2015 15:18

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

Vladimir_S 19.01.2015 15:28

Спасибо. И еще, если не затруднит, - подробнее о проблеме. Что значит "ввожу 1 элемент"? Первый элемент? Или вся строка состоит из одного символа? Расшифруйте, пожалуйста.

ИриSka-147 19.01.2015 15:33

вся строка состоит из 1го символа

Vladimir_S 19.01.2015 15:46

Хорошо, попробую выбрать время и повозиться с программой. Как получится.

ИриSka-147 19.01.2015 16:03

буду очень благодарна

Vladimir_S 19.01.2015 16:28

Так, ну погонял я Вашу программу.
Всё там абсолютно правильно, и по одному символу работает прекрасно, кроме одной мелочи.
Запомните на будущее:
СТРОКОВАЯ ПЕРЕМЕННАЯ СЧИТЫВАЕТСЯ ТОЛЬКО ОПЕРАТОРОМ "Readln", НИКАКИХ "Read"!!!
А потому исправьте четвертую снизу строку с "read(s);" на "readln(s);" - и будет Вам счастье!

ИриSka-147 19.01.2015 16:57

исправила ,и нет мне счастья

Vladimir_S 19.01.2015 17:09

Вложений: 2
Цитата:

Сообщение от ИриSka-147 (Сообщение 1097838)
исправила ,и нет мне счастья

Так.
Ну либо Вы не то исправили, либо у Вас какой-то глючный Паскаль.
Вот что сделал я.
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. Результаты:
Вложение 211364
Вложение 211365

tehno015tehno015tehno015


Часовой пояс GMT +4, время: 14:22.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.