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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2007, 00:31   #1
Dues
Новичок
Джуниор
 
Регистрация: 19.11.2007
Сообщений: 1
По умолчанию Проблема с программой

Задача: Найти в каждой строчки текста самые длинные слова и записать в новый текстовый файл.
Я не могу найти ошибку в программе. Может ошибка в сортировке потому что он не хочет выводить самые длинные слова, кто поможет решить проблему или подсказать ??

Цитата:
//////////////////// Процедура нахождения елементов с текста
function GetSubStr(st:string; expl:string; n:integer):string;
Var p,i:integer;

Begin
//Удаляем все первые пробелы
While (Pos(' ',st) = 1) and (length(st)>0) do
begin
delete(st,1,1);
end;
//////////////////////////////
for i:= 1 to n-1 do //Начало цикла поиска елементов текста
begin
p:=pos(expl,st); // Позиция пробела
st:=copy(st,p+1,Length(st)-p);//Копирует текст после первого пробела
//Цыкл обрезания пробелов после первого пробела
while (pos(expl,st)=1) and (length(st)>0) do
delete(st,1,1); //Убивает лишнии пробелы
end;

p:=pos(expl,st);

if p<>0 then
Result:=copy(st,1,p-1)
else
Result:=st;

End;
procedure TForm1.Button2Click(Sender: TObject);
var
tmp,k,n,i,j: integer;
a:array[1..99,1..99] of string;
b:array[1..9999] of string;
c:array[1..999] of integer;
d:array[1..99,1..99] of integer;
l:array[1..99,1..99] of string;
max_v:array[1..999] of string;
tmp2,TextBin,text:string;
begin

n:=RichEdit1.Lines.Count;

//Переназвем наш текст

for k:=1 to n do
begin
b[k]:= RichEdit1.Lines[k-1] +' ';

end;
//Поиск елементов для массива
i:=1;
c[1]:=0;
k:=0;
For k:=1 to n do
begin
i:=1;
while i<>0 do
begin
c[k]:=c[k]+1; //Количество елементов в будущем массиве (с-1)
a[k,i]:=GetSubStr(b[k],' ',i); //используем пробел в качестве разделителя

if a[k,i]='' then
i:=0
else
i:=i+1;
end;

end;



/////////////////////////////////////////////////////////
For k:=1 to n do
for i:=1 to (c[k]-1) do
begin
l[k,i]:=a[k,i];
d[k,i]:=Length(a[k,i]);
// ShowMessage(IntToStr(d[k,i]));
end;


For k:=1 to n-1 do
for i:=1 to (c[k]-1) do
begin
///////////////////////////////
for j:=1 to ((c[k]-1)-i) do
begin
////////////////////////////
if (d[k,j]) < (d[k,j+1]) then
begin //Обмен элементов
/////////////////////////////
tmp:=d[k,j];
d[k,j]:=d[k,j+1];
d[k,j+1]:=tmp;
/////////////////////
tmp2:=l[k,j];
l[k,j]:=l[k,j+1];
l[k,j+1]:=tmp2;
end;

end;

end;


for k:=1 to n do
for i:=1 to (c[k]-1) do
begin
TextBin:=TextBin+' - '+l[k,i];
end;
ShowMessage((TextBin));

for k:=1 to n do
for i:=1 to (c[k]-1) do
begin
if d[k,i]=d[k,i+1] then
max_v[i]:=l[k,i] ;
TextBin:=TextBin+' - '+max_v[i];
end;


end;
Dues вне форума Ответить с цитированием
Старый 19.11.2007, 01:46   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Удаляем все первые пробелы
Для этого существует функция TrimLeft.
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите с программой 1234 Общие вопросы Delphi 2 21.04.2008 10:50
У меня тут проблема с программой MAKEDON Свободное общение 1 10.03.2008 23:16
Проблема с программой eks-s Общие вопросы Delphi 9 06.02.2008 09:47
проблема с программой dima00 Общие вопросы Delphi 2 20.11.2007 13:56