Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2014, 19:34   #1
TIGRA3
Новичок
Джуниор
 
Регистрация: 23.01.2014
Сообщений: 3
По умолчанию Всем привет! Помоги пожалуйста исправить ошибку в программе.

Дополнить программу так, чтобы отдельно дополнительно печатались слова, которые короче 5 букв.
Код:
Program lab10_1;
uses crt;
type st=string;
mass=array[1..20] of st;
var s,s1,s2,s3:st;i,j,k,l,n:integer;
y:mass;

function quantity(s1,s2:st):integer;
var i,k:integer;
begin
k:=0;
for i:=1 to length(s2)-length(s1)+1 do
if copy(s2,i,length(s1))=s1
then k:=k+1;
quantity:=k;
end;

function poisk(s1,s2:st):st;
var i:integer;k:st;
begin
k:='нет';
for i:=1 to length(s2)-length(s1)+1 do
if copy(s2,i,length(s1))=s1 then k:='да';
poisk:=k; end;

procedure inverse(var s1:st);
var i:integer;k:st;
begin
k:='';
for i:=1 to length(s1) do
k:=copy(s1,i,1)+k;
s1:=k;
end;

procedure double(var s1:st);
var i:integer;k:st;
begin
k:='';
for i:=1 to length(s1) do
k:=k+copy(s1,i,1)+copy(s1,i,1);
s1:=k;
end;

procedure zamena(var s1:st;s2,s3:st);
var i:integer;k:st;
begin
k:='';
for i:=1 to length(s1) do
if copy(s1,i,length(s2))=s2
 then begin k:=k+s3;
 i:=i+length(s2)-1;
  end
else k:=k+copy(s1,i,1);
s1:=k; end;

procedure del(var s1:st;s2:st);
begin
zamena(s1,s2,'');
end;

procedure  slova(s1:st;var k:integer;var y:mass);
var i,l:integer;
begin
l:=pos('  ',s1);
while l>0 do begin
zamena(s1,'  ',' ');
l:=pos('  ',s1);
end;
k:=1;
l:=pos(' ',s1);
while l>0 do begin
y[k]:=copy(s1,1,l-1);
k:=k+1;
delete(s1,1,l);
l:=pos(' ',s1);
end;
y[k]:=copy(s1,1,length(s1));
end;

procedure printmass(k:integer;y:mass);
var i,j:integer;
begin
for i:=1 to k do begin
   for j:=1 to 40- length(y[i]) div 2 do
   write(' ');
   writeln(y[i]);
 end;
end;
procedure koroche(k:integer;y:mass);
var i,j,a:integer;
begin
 j:= length(s);
  k := 1;
  s := s + ' ';
  repeat
   a := pos(' ', s);
    if(a>5) then
    begin
      y[i] := y[i]+ copy(s, i,a);
      delete(s, i, a);
    end;
   if(a>=5) then
    delete(s, 1, a);
    i:=i+1;
  until i= j;
    writeln('слова, короче 5 букв: ',y[i]);
  end;
begin
writeln('введите предложение');
readln(s);
slova(s,n,y);
printmass(n,y);
koroche(n,y);
end


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 23.01.2014 в 23:37.
TIGRA3 вне форума Ответить с цитированием
Старый 23.01.2014, 22:16   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Код надо выделить, а затем нажать кнопку '#', которая есть в верхнем меню.

Сложно понять, что надо...
Но можно обратить внимание на следующее:
Код:
procedure inverse(var s1:st);
var i:integer;k:st;
begin
k:='';
for i:=1 to length(s1) do
k:=copy(s1,i,1)+k;
s1:=k;
end;
Это инверсия строки, вот только можно ведь и проще:
Код:
procedure inverse(var s1:st);
var i, m:integer;k:st;
begin
   m :=length(s1);
   for i:=1 to m do
      k[i]:=s1[m - i +1];
   s1:=k;
end;
А вот тут:
Код:
procedure koroche(k:integer;y:mass);
var i,j,a:integer;
begin
j:= length(s);

k := 1; { это для чего???????????}
          {так нельзя, поскольку k передается по значению}
s := s + ' ';
repeat
   a := pos(' ', s);
   if(a>5) then
   begin
      y[i] := y[i]+ copy(s, i,a); {так нельзя, поскольку y передается по значению}
      delete(s, i, a);
   end;
   if(a>=5) then
      delete(s, 1, a);
   i:=i+1;
   until i= j;
   writeln('слова, короче 5 букв: ',y[i]);
end;

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 23.01.2014, 22:31   #3
TIGRA3
Новичок
Джуниор
 
Регистрация: 23.01.2014
Сообщений: 3
По умолчанию

y[i] := y[i]+ copy(s, i,a); {так нельзя, поскольку y передается по значению}
а как это по другому записать?
TIGRA3 вне форума Ответить с цитированием
Старый 23.01.2014, 23:15   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Наверное в описании процедуры указать, что передавать по адресу:
Код:
procedure koroche(var k:integer;var y:mass);
var ...
begin
...
   y[i] := ...
...
end;
Но это только как вариант, поскольку не ясна постановка задачи.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
привет всем! ребят помогите пожалуйста с задачей.. mirik777 Помощь студентам 1 11.12.2013 10:09
Всем привет помгите пожалуйста по С caen21rus Общие вопросы C/C++ 2 16.06.2009 12:05
Привет всем!Помогите пожалуйста с сортировкой файла в Delphi, заранее спасибо Taisja Помощь студентам 2 01.06.2008 15:42