boloboshenku писал(а):
Нашел ошибку..
Код:
for k:=1 to n do begin
f:=0;{Обнулять f надо здесь, а не там, где было!}
for m:=1 to length(a[k]) do begin
for d:=1 to length(a[k]) do if a[k][m]=a[k][d] then inc(f); end;
if f>=3 then begin
inc(e);
b[e]:=a[k];
end; end;
Это неправильно. Например, такая программа отберет из текста «tty» слово «tty» (как содержащее три буквы «t»), что, конечно, неверно.
Добавлено спустя 1 час 57 минут 42 секунды:Если модифицировать так, как я указал выше, то программа будет повторять одно и то же (правильно) найденное слово (количество повторений равно количеству совпадающих букв в слове). Так, например, слово «ttttrrr» будет повторено семь раз.
Кстати, по смыслу, возвращаемое функцией GetWords значение переменной n, — это количество слов в тексте, однако на деле значение n на 1 больше, т.е. если ввести текс из одного слова, то GetWords вернет значение n равное 2. При этом первое слово в массиве a — это пустая строка (слово без единого символа).
Предложенный Вами алгоритм можно подправить путем добавления проверки «m<>d»
Код:
for k:=2 to n do
begin
f:=0;
for m:=1 to length(a[k]) do
for d:=1 to length(a[k]) do if (m<>d) and (a[k][m]=a[k][d]) then inc(f);
if f>=3 then begin
inc(e);
b[e]:=a[k];
end;
end;
Массив по k, конечно, может начинаться и с 1 — на результат это не повлияет.