![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
есть структура
Код:
unit Unit_Def; interface type Sportsmen = record Surname:ShortString; Name:ShortString; //Date_of_birth:ShortString; Day_of_Birth:integer; Month_of_Birth:integer; Year_of_Birth:integer; Weight:byte; Height:byte; Sex:ShortString; end; Mass = array of Sportsmen; Код:
Massiv:Mass; придумал такое : Код:
procedure Puzyrek(var Massiv:Mass;k:integer);// k - размер массива
var
i,j,m,n:integer;
Temp:Mass;//временная переменная для перемещения
begin
setlength(Temp,1);
for j:=0 to k-1 do
begin
with Massiv[j] do
m:=Weight;
for i:=0 to k-2 do
begin
with Massiv[i+1] do
n:=Weight;
if m>n then
begin
Temp[0]:=Massiv[j];
Massiv[j]:=Massiv[i+1];
Massiv[i+1]:=Temp[0];
end;
end;
end;
end;и сортировать..Есть какой нибудь ещё способ сортировки в таком случае?И из того что я начал делать что нибудь придумать можно? |
|
#2
|
||||
|
||||
|
1. Зачем массив для временной переменной? Объявляй её типом Sportsmen.
2. Логика сортировки следующая: Проходим циклом по всем элементам. Для каждого элемента внутренним циклом находим максимальное значение, после чего меняем (так проще и оптимальнее). Искать начинаем не с нулевой позиции, а с текущей (внешней). |
|
#3
|
|||
|
|||
|
Цитата:
про массив понятно,про второе нет.я не могу же внутри одного цикла использовать два свойства из разных элементов массива и делаю это через with и путаюсь с индексами i,j.не могу сообразить что где должно быть.. |
|
#4
|
||||
|
||||
|
|
|
#5
|
|||
|
|||
|
Цитата:
читал,но как сорганизовать всё это беря во внимание что мне надо i,j использовать что бы m и n приравнивать к отдельным свойствам записи - тут мозг мой сдаётся |
|
#6
|
||||
|
||||
|
А зачем тебе в данной ситуации вообще with? Точка на клавиатуре не работает?
|
|
#7
|
|||
|
|||
|
Цитата:
Ну если пузырьком, то: почему Temp:Mass;а не Temp:Sportsmen;? вместо // k - размер массива можно использовать Length(Massiv); width для вытаскивания одного значениея - совершенно лишнее, особенно когда будут перестановки; и внутренний цикл можно подсократить. И с учёто этого Код:
procedure Puzyrek(var Massiv:Mass);
var
i,j:integer;
Temp:Sportsmen;//временная переменная для перемещения
begin
for j:=0 to Length(Massiv)-1 do
begin
for i:=j+1 to Length(Massiv)-1 do
begin
if Massiv[i].Weight>Massiv[j].Weight then
begin
Temp:=Massiv[j];
Massiv[j]:=Massiv[i];
Massiv[i]:=Temp;
end;//if
end;//for i
end;//for j
end; |
|
#8
|
|||
|
|||
|
Спасибо.Сейчас всё осмыслю. Точки все работают,но занимаюсь Delphi недолго и не вижу все возможные способы решения.
|