Сортировка строки в зависимости от длинны слов |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Сортировка строки в зависимости от длинны слов |
Mordok |
Сообщение
#1
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: 0 |
В общем надо составить процедуру которая сортировала бы строку в зависимости длинны слов от пробела до пробела. Т.е. на первом месте должно оказаться самое короткое слово, дальше слова идут по возрастанию длинны и на последнем месте самое длинное слово... Если не сложно подскажите плииз. Хотябы алгоритм...
Заранее благодарен. Сообщение отредактировано: Mordok - |
Mordok |
Сообщение
#2
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: 0 |
Ну вот мой алгоритм, я не буду писать процедуры просто напишу работающую программу
Цитата 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. все просто, берем строку считаем длинну от пробела до пробела или до точки (можно еще и другие символы но это не важно), записывам длинну слов и индексы начала слова в отдельные массивы, затем пузырьком сортируем длинны и индексы (в зависимости от длинны естественно) ну и в конце записываем все в новую строку по этим отсортированным массивам индексов и длинн... |
Текстовая версия | 17.06.2024 12:56 |