Помощь - Поиск - Пользователи - Календарь
Полная версия: Сортировка по ключам
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Begin
Дана база данных,организовать сортировку по ключам,например по алфавиту(вывод товара в алфавитном порядке) и по цифре(вывод товара по возрастающей цене).
Кину описание и 2 процедуры сортировки,с которыми у меня проблема.

Желательно сделать сортировку пузырьком,что я и пытаюсь сделать.То есть у меня будут 2 процедуры,
я выберу сортировка по алфавиту(весь товар по алфавиту) и сортировку по цифре(весь товар по возрастающей цене)


const
n_items = 7;
l_name = 30;

type
tname = string[l_name];
pTovar = ^Tovar;
Tovar = record
name: tname;
kolvo: integer;
cena: real;
next: pTovar;
prev: pTovar;
end;

var
DefaultMode,
ActiveColor, InactiveColor: word;
key: char;
item: word;
prev: word;
beg: pTovar;
fin: pTovar;
p: pTovar;
name: tname;
tovr: Tovar;


procedure Sortkey1(p:pTovar; const tovr:tname);
var
tmp,tmps:pTovar;
begin
New(tmp);
while p<>nil do
begin
tmp:=p^.next;
while tmp<>nil do
begin
if tmp^.name<p^.name then
begin
tmps:=tmp^.name;
tmp^.name:=p^.name;
p^.name:=tmps
end;
tmp:=tmp^.next
end;
p:=p^.next
end
end;

procedure Sortkey2(p:pTovar; сena:real);
var
tmp,tmps:pTovar;
begin
New(tmp);
while p<>nil do
begin
tmp:=p^.next;
while tmp<>nil do
begin
if tmp^.cena<p^.cena then
begin
tmps:=tmp^.cena;
tmp^.name:=p^.cena;
p^.cena:=tmps
end;
tmp:=tmp^.next
end;
p:=p^.next
end
end;
Федосеев Павел
Поищи на форуме в темах о динамических структурах, о списках варианты сортировки, в FAQ (в самом верху этой страницы среди пунктов правил). Я недавно выкладывал сортировку слиянием (не совсем оптимальный выриант - там всё время пересчитываются количество элементов списка).
См.[Volvo], [1], [2], [3], [4], [5], [6].

Рекомендую реализовать какой нибудь вариант сортировки в виде одной универсальной процедуры, в которую будет передаваться помимо прочего и функция сравнения. А вот функций сравнения может быть несколько. Тогда наладив один раз сортировку ты будешь лишь менять ключ (способ сравнения).

Так как ты умеешь самостоятельно рабтать, то просто ознакомься со ссылками. В твоей процедуре SortKey1 (да и SortKey2) ошибка присвоения разных типов при обмене двух значений
tmps:=tmp^.name;
tmp^.name:=p^.cena;
Кроме этого, ты забываешь обменять остальные информационные поля.
В общем, удели внимание фрагменту обмена значениями между двумя элементами списка - там сплошные ошибки (присвоение разных типов, не полный обмен информационных полей).

Надеюсь справишься. Если нет - вечером после работы загляну, посмотрю что и как.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.