Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.10.2011, 19:01
badtrips badtrips вне форума
Прохожий
 
Регистрация: 06.06.2011
Сообщения: 29
Репутация: 10
По умолчанию подскажите логику работы цикла по массиву из свойства структуры

есть структура
Код:
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;
делаю какой нибудь массив и нужно его отсортировать пузырьком по свойству Weight.
придумал такое :
Код:
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;
наверху написано всё криво,никак не могу придумать логику такой процедуры,решил только ввести m и n что бы сравнивать значение Weight
и сортировать..Есть какой нибудь ещё способ сортировки в таком случае?И из того что я начал делать что нибудь придумать можно?
Ответить с цитированием
  #2  
Старый 05.10.2011, 19:16
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

1. Зачем массив для временной переменной? Объявляй её типом Sportsmen.
2. Логика сортировки следующая:
Проходим циклом по всем элементам. Для каждого элемента внутренним циклом находим максимальное значение, после чего меняем (так проще и оптимальнее). Искать начинаем не с нулевой позиции, а с текущей (внешней).
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 05.10.2011, 19:20
badtrips badtrips вне форума
Прохожий
 
Регистрация: 06.06.2011
Сообщения: 29
Репутация: 10
По умолчанию

Цитата:
Сообщение от DJ PhoeniX
1. Зачем массив для временной переменной? Объявляй её типом Sportsmen.
2. Логика сортировки следующая:
Проходим циклом по всем элементам. Для каждого элемента внутренним циклом находим максимальное значение, после чего меняем (так проще и оптимальнее). Искать начинаем не с нулевой позиции, а с текущей (внешней).


про массив понятно,про второе нет.я не могу же внутри одного цикла использовать два свойства из разных элементов массива и делаю это через with и путаюсь с индексами i,j.не могу сообразить что где должно быть..
Ответить с цитированием
  #4  
Старый 05.10.2011, 19:21
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

http://ru.wikipedia.org/wiki/Сортировка_пузырьком
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 05.10.2011, 19:22
badtrips badtrips вне форума
Прохожий
 
Регистрация: 06.06.2011
Сообщения: 29
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.

читал,но как сорганизовать всё это беря во внимание что мне надо i,j использовать что бы m и n приравнивать к отдельным свойствам записи - тут мозг мой сдаётся
Ответить с цитированием
  #6  
Старый 05.10.2011, 19:23
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

А зачем тебе в данной ситуации вообще with? Точка на клавиатуре не работает?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #7  
Старый 05.10.2011, 19:26
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Цитата:
Сообщение от badtrips
наверху написано всё криво,никак не могу придумать логику такой процедуры,решил только ввести m и n что бы сравнивать значение Weight
и сортировать..Есть какой нибудь ещё способ сортировки в таком случае?И из того что я начал делать что нибудь придумать можно?

Ну если пузырьком, то:
почему 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  
Старый 05.10.2011, 19:34
badtrips badtrips вне форума
Прохожий
 
Регистрация: 06.06.2011
Сообщения: 29
Репутация: 10
По умолчанию

Спасибо.Сейчас всё осмыслю. Точки все работают,но занимаюсь Delphi недолго и не вижу все возможные способы решения.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:55.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025