Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Вниз

сортировка   Найти похожие ветки 

 
новый   (2004-01-24 21:16) [0]

Мастера, помогите пожалуйста, почему у меня не работает процедура сортировки. Где может быть ошибка?
procedure Sortsalary(var pp:Table);
var x : Employ;
i, j, n: integer;
begin
n:= length(pp);
for i:=0 to n-1 do
for j:=0 to n-2 do
if pp[j].plat > pp[j+1].plat then
begin
x:=pp[j+1];
pp[j+1]:=pp[j];
pp[j]:=x;
end;
end;


 
Stilgar   (2004-01-24 21:38) [1]

А можно узнать, что такое Table и Employ? Прошу прощения, наверное у меня склероз.


 
CyberFreak   (2004-01-24 21:54) [2]

Надо думать, Table - это массив элементов типа Employ. И этот массив надо отсортировать по полю plat. Было бы неплохо, если бы ты показал, как эти типы у тебя описаны.


 
CyberFreak   (2004-01-24 21:57) [3]

Да, и еще неплохо было знать, что значит "не работает". Вообще вроде как похоже на правду, меня тока смущает строка:

n:= length(pp);


 
alexx   (2004-01-24 21:59) [4]

Описание типов:
type
ss = String [20];
Employ = record
fam: ss;
im: ss;
ot: ss;
plat: real;
end;
Table = array of Employ;


 
новый   (2004-01-24 21:59) [5]

Описание типов:
type
ss = String [20];
Employ = record
fam: ss;
im: ss;
ot: ss;
plat: real;
end;
Table = array of Employ;


 
новый   (2004-01-24 22:03) [6]

Программа запускается, но при вызове функции выдает ошибку: нарушение доступа по адресу ...


 
jack128   (2004-01-24 22:05) [7]

Процедурка должна сортировать. Хотя её можно и оптимизировать..


 
jack128   (2004-01-24 22:06) [8]

Ах ну да.

for i:=0 to n-2 do
for j:=0 to n - 2 - i do


 
новый   (2004-01-24 22:22) [9]

Все равно выдает ошибку.


 
Stilgar   (2004-01-24 22:27) [10]

Чтобы было быстрее, внешний цикл сортировки пузырьком должен быть while или repeat с флагом, который устанавливается, когра не одна пара элементов не была перемещена. Но почему не работает, я не понимаю.
Пришел в голову очевидный вариант: до вызова процедуры SetLength делаете? Больше чем на один елемент массива?


 
BorH   (2004-01-24 22:36) [11]

program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
ss = String [20];
Employ = record
fam: ss;
im: ss;
ot: ss;
plat: real;
end;
Table = array of Employ;

procedure Sortsalary(var pp:Table);
var
x : Employ;
i, j, n: integer;
begin
n:= length(pp);

for i:=0 to n-1 do
for j:=0 to n-2 do
if pp[j].plat > pp[j+1].plat then
begin
x:=pp[j+1];
pp[j+1]:=pp[j];
pp[j]:=x;
end;
end;

var
i:integer;
PP:Table;

begin
randomize;

SetLength(PP,10);

for i:=0 to Length(PP)-1 do
begin
PP[i].plat:=random(100);
Write(PP[i].plat:4:0);
end;
Writeln;

Sortsalary(PP);

Writeln("Sorted!");

for i:=0 to Length(PP)-1 do
begin
Write(PP[i].plat:4:0);
end;

Readln;
end.


Всё пашет...
У тебя что-то или с машиной, или с системой или... :)) Будем надеятся, что с первыми двумя :))


 
TUser   (2004-01-25 08:12) [12]

Вообще-то Stilgar прав - алгоритм, мягко говоря, не оптимальный. Даже если оставаться в пределах квадратичного алгоритма - так лучше его поразумнее организовать. Типа на каждом шаге упорядочены первые N элементов. Берем N+1-й, ищем куда бы его поставить. Если требуется смещаем элементы - побыстрее будет. Ну, а если length(Table) - это много, тогда пузырьками и прочее.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.038 c
3-16029
Yurij-71@ukr.net
2004-01-16 17:39
2004.02.06
Счетчик в Парадокс


14-16613
Eagle Owl
2004-01-13 22:43
2004.02.06
Дизассемблеры...


1-16356
GrayFace
2004-01-23 18:40
2004.02.06
Как ловит exception?


14-16651
RealRascal
2004-01-13 23:07
2004.02.06
Привлечение внимания к окну, когда активно другое приложение


1-16287
SkullNet
2004-01-25 22:17
2004.02.06
Иконка в строке состояния.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский