![]() |
|
|
Регистрация | << Правила форума >> | 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. Логика сортировки следующая: Проходим циклом по всем элементам. Для каждого элемента внутренним циклом находим максимальное значение, после чего меняем (так проще и оптимальнее). Искать начинаем не с нулевой позиции, а с текущей (внешней). Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
|||
|
|||
![]() Цитата:
про массив понятно,про второе нет.я не могу же внутри одного цикла использовать два свойства из разных элементов массива и делаю это через with и путаюсь с индексами i,j.не могу сообразить что где должно быть.. |
#4
|
||||
|
||||
![]() — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
![]() Цитата:
читал,но как сорганизовать всё это беря во внимание что мне надо i,j использовать что бы m и n приравнивать к отдельным свойствам записи - тут мозг мой сдаётся |
#6
|
||||
|
||||
![]() А зачем тебе в данной ситуации вообще with? Точка на клавиатуре не работает?
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#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 недолго и не вижу все возможные способы решения.
|