Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Сортировка строки в зависимости от длинны слов

Автор: Mordok 2.12.2006 21:34

В общем надо составить процедуру которая сортировала бы строку в зависимости длинны слов от пробела до пробела. Т.е. на первом месте должно оказаться самое короткое слово, дальше слова идут по возрастанию длинны и на последнем месте самое длинное слово... Если не сложно подскажите плииз. Хотябы алгоритм...
Заранее благодарен.

Автор: volvo 2.12.2006 22:15

Идешь сюда:
http://forum.pascal.net.ru/index.php?showtopic=6972
выбираешь любой способ разбиения строки на слова, сортируешь массив слов по возрастанию длины любым способом отсюда:
http://forum.pascal.net.ru/index.php?showtopic=3065
, собираешь слова в отсортированном порядке в строку...

Автор: Mordok 3.12.2006 3:51

спасибо большое за совет, только я придумал алгоритм гораздо проще....
если кому надо могу выложить.

Автор: мисс_граффити 3.12.2006 4:06

интересно...
выкладывай.

Автор: Mordok 3.12.2006 18:58

Ну вот мой алгоритм, я не буду писать процедуры просто напишу работающую программу

Цитата

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.



все просто, берем строку считаем длинну от пробела до пробела или до точки (можно еще и другие символы но это не важно), записывам длинну слов и индексы начала слова в отдельные массивы, затем пузырьком сортируем длинны и индексы (в зависимости от длинны естественно) ну и в конце записываем все в новую строку по этим отсортированным массивам индексов и длинн...

Автор: volvo 3.12.2006 20:00

Цитата
только я придумал алгоритм гораздо проще....
Я посмотрю, как ты с этим ПРОСТЫМ алгоритмом (а точнее - с его реализацией) разберешься через месяц, если тебе это понадобится (а оно понадобится, даже не сомневайся)... Вот то что я тебе предложил - я сделал 6 лет назад, и с первого взгляда можно объяснить работу программы начиная с любой строки (даже через ГОДЫ, не говоря уже о месяце-двух)... А ты будешь переделывать программу заново каждый раз... Ну что ж, "каждому свое" (С)...