19.01.2015, 15:04 | #1 (permalink) |
Новичок
Регистрация: 18.01.2015
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Паскаль. Сжатие строки
Код:
когда ввожу 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. |
19.01.2015, 15:04 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Довольно частая проблема, нашлись похожие темы Паскаль, строки Паскаль, строки |
19.01.2015, 15:09 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Прежде всего - будьте так любезны выложить формулировку задачи.
И еще - в соответствии с нашими Правилами, именования тем типа "Помогите!!", "Нужна помощь!", "Help!!!", "Помогите, пожалуйста" и т.п. НЕ ДОПУСКАЮТСЯ. |
19.01.2015, 15:18 | #3 (permalink) |
Новичок
Регистрация: 18.01.2015
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Составить процедуру "сжатия" исходной последовательности символов: каждая подпоследовательность, состоящая из нескольких вхождений одного и того же символа, заменяется на текст х(к), где х - символ, к - строка, являющаяся записью числа вхождений символа х в исходную последовательность.
|
19.01.2015, 15:28 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Спасибо. И еще, если не затруднит, - подробнее о проблеме. Что значит "ввожу 1 элемент"? Первый элемент? Или вся строка состоит из одного символа? Расшифруйте, пожалуйста.
|
19.01.2015, 15:33 | #5 (permalink) |
Новичок
Регистрация: 18.01.2015
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
вся строка состоит из 1го символа
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
19.01.2015, 16:28 | #8 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Так, ну погонял я Вашу программу.
Всё там абсолютно правильно, и по одному символу работает прекрасно, кроме одной мелочи. Запомните на будущее: СТРОКОВАЯ ПЕРЕМЕННАЯ СЧИТЫВАЕТСЯ ТОЛЬКО ОПЕРАТОРОМ "Readln", НИКАКИХ "Read"!!! А потому исправьте четвертую снизу строку с "read(s);" на "readln(s);" - и будет Вам счастье! |
19.01.2015, 17:09 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Так.
Ну либо Вы не то исправили, либо у Вас какой-то глючный Паскаль. Вот что сделал я. 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. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|