Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 07.11.2014
Сообщений: 19

Составить программу компрессии строк

07.11.2014, 22:19. Показов 1751. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
КОМПРЕССИЯ СТРОК. Рассмотрим следующий алгоритм сжатия строк: если в строке встречается несколько одинаковых символов, идущих подряд, то они заменяются одним символом, а их количество запоминается в массив, который выводится в конце. Ваша задача реализовать этот алгоритм.
Формат ввода: St - строка, которую надо сжать. Длина строки не более 255 символов.
Формат вывода: Str -сжатая строка. A1 A2 ... An - массив, характеризующий сжатие. Ai показывает скольким символам данной строки соответствует i-ый символ строки Str.
Пример ввода: ProgrammingContest
Пример вывода: ProgramingContest
1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.11.2014, 22:19
Ответы с готовыми решениями:

Составить программу, формирующую текстовый файл f из 9-ти строк
Составить программу, формирующую текстовый файл f из 9-ти строк, в первой из которых одна литера «1», во второй – две литеры «2»,…, в...

Составить программу формирования массива символьных строк
Нужна помощь с решением задачи. Составить программу формирования массива символьных строк с последующим упорядочением размещения...

Составить программу, читает произвольный текст (5 строк по 10 символов)
Составить программу, читает произвольный текст (5 строк по 10 символов) и распечатывает по алфавиту все латинские буквы, входящие в этот...

5
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
07.11.2014, 23:17
Можно так решить.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
uses crt;
var s:string;
    a:array[32..255] of byte;
    n,i,j:byte;
begin
writeln('Введите строку с одинаковыми символами рядом');
readln(s);
n:=length(s);
for i:=32 to 255 do
a[i]:=0;
for i:=1 to n do
inc(a[ord(s[i])]);
for i:=1 to n-1 do
for j:=n downto i+1 do
if s[j]=s[i] then delete(s,j,1);
writeln(s);
for i:=32 to 255 do
if a[i]<>0 then write(a[i],' ')
end.
0
0 / 0 / 0
Регистрация: 07.11.2014
Сообщений: 19
08.11.2014, 08:35  [ТС]
Program2.pas(14) : Ошибка времени выполнения: Индекс находился вне границ массива.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
08.11.2014, 08:49
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
uses crt;
var s:string;
    a:array[32..255] of byte;
    n,i,j:byte;
begin
writeln('Введите строку с одинаковыми символами рядом');
readln(s);
n:=length(s);
for i:=32 to 255 do
a[i]:=0;
for i:=1 to n do
inc(a[ord(s[i])]);
for i:=1 to length(s)-1 do//длина строки меняется, поэтому зря я присобачил n
for j:=length(s) downto i+1 do//хотя в простом АВС это не влияло и ошибки не было
if s[j]=s[i] then delete(s,j,1);
writeln(s);
for i:=32 to 255 do
if a[i]<>0 then write(a[i],' ')
end.
0
0 / 0 / 0
Регистрация: 07.11.2014
Сообщений: 19
08.11.2014, 08:54  [ТС]
Всё равно в чём-то проблема.
Пример ввода: ProgrammingContest
Пример вывода: ProgramingContest
1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1
А если я ввожу : ProgrammingContest
то выдаёт: ProgaminCtes
1 1 1 1 2 1 2 2 2 2 1 2

Добавлено через 1 минуту
Скорее всего оно ищет по всему предложению. А нужно рядомстоящие XXX заменять на X
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
08.11.2014, 10:05
Лучший ответ Сообщение было отмечено jimorozov как решение

Решение

Да, ночью нужно спать...

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var s:string;
    a:array[byte] of byte;
    n,i,j:byte;
begin
writeln('Введите строку с одинаковыми символами рядом');
readln(s);
s:=s+' ';
i:=1;
n:=0;
while i<length(s) do
 begin
  inc(n);
  a[n]:=1;
  j:=i+1;
  while(j<=length(s))and(s[j]=s[i]) do
   begin
    inc(a[n]);
    delete(s,j,1);
   end;
  inc(i);
 end;  
writeln(s);
for i:=1 to n do
write(a[i],' ')
end.
Добавлено через 3 минуты
Да еще вставьте строку
Pascal
1
delete(s,length(s),1) ;//удалим пробел который добавили в начале
после строки 21

Добавлено через 56 минут
Уберу манипуляции с пробелом...
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var s:string;
    a:array[byte] of byte;
    n,i,j:byte;
begin
writeln('Введите строку с одинаковыми символами рядом');
readln(s);
i:=1;
n:=0;
while i<=length(s) do
 begin
  inc(n);
  a[n]:=1;
  if i<length(s) then
   begin
    j:=i+1;
    while(j<=length(s))and(s[j]=s[i]) do
     begin
      inc(a[n]);
      delete(s,j,1)
     end;
    inc(i)
   end
  else inc(i)
 end;  
writeln(s);
for i:=1 to n do
write(a[i],' ')
end.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.11.2014, 10:05
Помогаю со студенческими работами здесь

Двухмерные массивы: Составить программу подсчёта суммы произведений элементов строк
Задан двумерный массив Y из 7-и строк и 3-х столбцов. Составить программу подсчёта суммы произведений элементов строк. кто может...

Составить программу, с помощью которой можно сформировать текстовый файл из строк
Составить программу, с помощью которой можно сформировать текстовый файл из строк, которые должны быть выведены с клавиатуры. Помогите...

Составить программу, которая создаёт текстовый файл, состоящий из произвольного числа строк
1) написать программу функцию, вычисляющую y=e^x=1+(x/1!)+(x^2)/2!+...+(x^n)/n!+... 2) Задан список из десяти городов.Подсчитать кол-во...

Составить программу, исключающую пробелы, стоящие в концах строк текстового файла p и помещающую результат в файл g.
Создайте текстовый файл р. Составьте программу, исключающую пробелы, стоящие в концах его строк и помещающую результат в файл g.

Составить программу формирования и вывода на экран одномерного массива состоящего из сумм элементов строк двум
составить программу формирования и вывода на экран одномерного массива состоящего из сумм элементов строк двумерного массива заданного с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru