Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 03.06.2010, 23:19   #1 (permalink)
Reega
Новичок
 
Регистрация: 31.05.2010
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Посчитать кол-во сложенных символов

Помогите пожалуйста составить одну программку на Паскале

Нужно составить программу в которой входящие данные (данные те которые вводятся с клавиатуры) были строки символов от 'А' до 'Z' по крайней мере 1 и не более 100 символов.
А выходящие данные содержатся в одной строке, которая содержит кратчайшие сложенные
символы.
Понимаю что задание мутное попытаюсь объяснить на примере
К примеру вводим AAAAAAAAAABABABCCD, программа выводит 9(A)3(AB)CCD
Или вводим NEERCYESYESYESNEERCYESYESYES, программа выводит 2(NEERC3(YES))
Reega вне форума   Ответить с цитированием

Старый 03.06.2010, 23:19
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Прочтение аналогичных тем очень эффективно в решении проблемы

Как посчитать все итерации в циклах?
Помогите посчитать резистор для светодиода

Старый 07.06.2010, 20:00   #2 (permalink)
Reega
Новичок
 
Регистрация: 31.05.2010
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Наверстал код но пишет что нехватает памяти подскажите в чем ошибка
Цитата:
var s:array [1..100] of char;
r:array [1..100,1..100,1..100] of char;
l:array [1..100,1..100] of byte;
n,i,j,z,k,a,b:integer;
bool:boolean;
function f (i:byte):byte;
begin
if (i>=10) and (i<100) then f:=4 else if i=100 then f:=5 else f:=3;
end;
begin
i:=1; fillchar (l,sizeof (l),0);
while not eoln do begin Read (s[i]); inc (i); end;
n:=i-1;
for j:=1 to 4 do
for i:=1 to n-j+1 do begin
for z:=i to i+j-1 do r[i,j,z-i+1]:=s[z];
l[i,j]:=j;
end;
for j:=5 to n do
for i:=1 to n-j+1 do begin
a:=0;
for z:=1 to j-1 do
if (l[i,j]>l[i,z]+l[i+z,j-z]) or (l[i,j]=0) then
begin
l[i,j]:=l[i,z]+l[i+z,j-z];
a:=z;
end;
b:=0;
for z:=2 to j do
if j mod z=0 then
begin
bool:=true;
for k:=i to i-1+j-j div z do if s[k]<>s[k+j div z] then begin bool:=false; break; end;
if bool then if l[i,j]>=f(z)+l[i,j div z] then
begin
l[i,j]:=f(z)+l[i,j div z];
b:=z;
end;
end;
if b=0 then
begin
for z:=1 to l[i,a] do
r[i,j,z]:=r[i,a,z];
for z:=1 to l[i+a,j-a]
do r[i,j,z+l[i,a]]:=r[i+a,j-a,z];
end else
begin
if b<10 then begin
r[i,j,1]:=chr (b+ord ('0'));
r[i,j,2]:='(';
for z:=1 to l[i,j div b] do r[i,j,z+2]:=r[i,j div b,z];
r[i,j,l[i,j div b]+3]:=')';
end else if b<100 then begin
r[i,j,1]:=chr (b div 10+ord ('0'));
r[i,j,2]:=chr (b mod 10+ord ('0'));
r[i,j,3]:='(';
for z:=1 to l[i,j div b] do r[i,j,z+3]:=r[i,j div b,z];
r[i,j,l[i,j div b]+4]:=')';
end else begin
r[i,j,1]:='1';
r[i,j,2]:='0';
r[i,j,3]:='0';
r[i,j,4]:='(';
for z:=1 to l[i,j div b] do r[i,j,z+4]:=r[i,j div b,z];
r[i,j,l[i,j div b]+5]:=')';
end;
end;
end;
for i:=1 to l[1,n] do write (r[1,n,i]);
end.
Reega вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.