Ну вот мой алгоритм, я не буду писать процедуры просто напишу работающую программу
Цитата
const
A=30;
t='.';
p=' ';
type
T_Array=array[1..A] of integer;
var
s1,sortpr:string;
i,j,k,n,cons,cons1:integer;
f,f1:boolean;
index,dlinna:T_Array;
begin
readln (s1);
sortpr:='';
i:=0;j:=0;k:=0;
while i<>length(s1) do
begin
f:=false;
i:=i+1;
k:=i;
repeat
if (s1[i]=t) or (s1[i]=p) then
begin
f:=true;
j:=j+1;
end
else i:=i+1;
until f;
n:=i-k;
index[j]:=k;
dlinna[j]:=n;
end;
begin
repeat
f1 := FALSE;
for j := 1 to A-1 do
if dlinna[j] > dlinna[j+1] then
begin
cons := dlinna[j]; cons1:= index[j];
dlinna[j] := dlinna[j + 1]; index[j]:= index[j+1];
dlinna[j + 1] := cons; index[j+1]:=cons1;
f1 := TRUE;
end;
until not f1;
end;
begin
for j:=1 to a do
for k:=1 to length(s1) do
if (k>=index[j])and(k<=index[j]+dlinna[j]) then sortpr:=sortpr+s1[k];
end;
write(sortpr);
readln;
end.
все просто, берем строку считаем длинну от пробела до пробела или до точки (можно еще и другие символы но это не важно), записывам длинну слов и индексы начала слова в отдельные массивы, затем пузырьком сортируем длинны и индексы (в зависимости от длинны естественно) ну и в конце записываем все в новую строку по этим отсортированным массивам индексов и длинн...