Код
Var
s:String;
i,j,k,n,len:Integer;
Words:Array[1..100] Of String;
Const
Separators = [' ',',','.','!','?']; {Дополнить по желанию}
Begin
ReadLn(s);
n:=1;
i:=1;
While i<Length(s) Do
Begin
While (i<Length(s)) And (s[i] In Separators) Do
Inc(i);
If Length(s)<i Then
Break;
j:=i;
While (j<Length(s)) And (s[j] In Separators) Do
Inc(j);
i:=j;
Words[n]:=Copy(s,i,j-i);
Inc(n)
End;
WriteLn('Total ',n,' words.');
If n=0 Then
Halt;
For i:=1 To n-1 Do
Begin
Len:=Length(Words[i]);
k:=i;
For j:=i+1 To n Do
If Length(Words[j])<Len Then
Begin
Len:=Length(Words[j]);
k:=j
End;
If k<>i Then
Begin
s:=Words[i];
Words[i]:=Words[k];
Words[k]:=s
End
End;
i:=1;
While i<n Do
Begin
j:=i+1;
While (j<n) And (Length(Words[j])=Length(Words[i])) Do
Begin
WriteLn(Words[j]);
Inc(j)
End;
If j<>i+1 Then
Begin
WriteLn(Words[i]);
WriteLn('-----------');
WriteLn('Words Of Length ',Length(Words[i]))
End;
i:=j
End
End.
Должно быть что-то похожее...
К сожалению проверить не могу, т. к. Pascal'я под рукой нет.
Решение примерно следующее:
1). Вводим строку.
2). Разбираем её на слова и сохраняем их в Words, а их кол-во в n.
3). Сортируем Words по длине строк. Пузырьком, чтоб не париться

4). Выводим строки одинаковой длины:
а). Берём очередную строку.
б). Рассматриваем все последующие.
в). Если длины строк совпадают, то переходим к следующей, иначе прерываем перебор.
г). Если нашлась ещё хоть одна строка такой длины, то выводим текущую строку на экран, а затем и длину всех этих строк. Прости за туфтологию :D
Вот и всё.