Помощь - Поиск - Пользователи - Календарь
Полная версия: Cортировка по алфавиту?
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Lespot
Народ, помогите, пожалуйста - срочно нужно! Нужно упорядочить массив строк M по алфавиту. Я знаю, что это очень просто - ну что-то никак не получается sad.gif
volvo
FAQ: Методы сортировок ... Выбирай ...
Lespot
Цитата(volvo @ 18.06.05 18:41)


Я уже и пузырьком пользовался, и ещё чем-то, но никак. Цикл зацикливается. Сортировка - это моё больное место sad.gif Можешь именно по алфавиту написать?
volvo
Так в том то и дело, что строки и будут отсортированы ПО АЛФАВИТУ !!!

Type
arrType = Array[1 .. n] Of String; { исправление №1 }
Var
M: arrType;
T: String;
...
For i := 1 To n Do
For j := n DownTo i+1 Do
If M[Pred(j)] > M[j] Then Begin
T := M[Pred(j)]; M[Pred(j)] := M[j]; M[j] := T
End;

FAQ для чего? Чтобы каждый раз то же самое заново переписывать? Я например так не думаю...
Lespot
Цитата(volvo @ 18.06.05 19:00)
Так в том то и дело, что строки и будут отсортированы ПО АЛФАВИТУ !!!

Type
  arrType = Array[1 .. n] Of String; { исправление №1 }
Var
  M: arrType;
  T: String;
...
  For i := 1 To n Do
    For j := n DownTo i+1 Do
      If M[Pred(j)] > M[j] Then Begin
        T := M[Pred(j)]; M[Pred(j)] := M[j]; M[j] := T
      End;

FAQ для чего? Чтобы каждый раз то же самое заново переписывать? Я например так не думаю...


Не работает!
Я уже ничего не понимаю. sad.gif sad.gif sad.gif

В общем, у меня такая ситуация: Есть массив 'm', состоящий из записей 'order', в которой есть поле 'pol', так вот мне нужно, чтобы чтобы массив был отсортирован в алфавитном порядке этих полей.
Lespot
Помоги, пожалуйста! Очень нужно!
klem4
Вот наклепал на скорую руку, потестил, вроде работает, возможно надо подкорректировать :

uses crt;
var
str:array[1..10] of string;
temp,s1,s2:string;
i,j,n:integer;
flag:boolean;

Begin

clrscr;

write('n='); readln(n);

for i:=1 to n do begin
write('srt[',i,']=');
readln(str[i]);
end;

repeat

flag:=true;

for i:=1 to n-1 do begin

s1:=str[i];
s2:=str[i+1];

j:=1;
while(s1[j]=s2[j]) do inc(j);

if (j<=length(s1))and(j<=length(s2)) then
if not(ord(s1[j])<ord(s2[j])) then begin
temp:=str[i];
str[i]:=str[i+1];
str[i+1]:=temp;
flag:=false;
end;
end;

until flag;

for i:=1 to n do writeln(str[i]);

readln;

end.




поправил, теперь все отлично работает smile.gif
Lespot
Спасибо огромное!!!
Всё работает! :D :D :D
volvo
Lespot,
В следующий раз вопрос задавай корректно. Никто не сможет догадаться, что у тебя не массив из строк, а массив из записей, пока ты сам об этом не скажешь...

klem4,
прекращаем переписывать по 100 раз программы, которые есть в FAQ. К тебе, как ни странно, правила форума тоже относятся... Сначала - поиск, потом ответ...
FAQ: Как упорядочить данные по возрастанию
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.