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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.05.2011, 03:09
Sevenfold Sevenfold вне форума
Прохожий
 
Регистрация: 06.05.2010
Сообщения: 9
Репутация: 10
Счастье Динамический двунаправленный список (Рандом)

Здраствуйте. Сразу к делу.

Типы данных для описания списка:
Код:
  TData = Integer;
  (* Тип, описывающий элемент списка. *)
  TPElem = ^TElem;
 
  TElem = record
    Data: TData;
    PNext: TPElem;
    PPrev: TPElem;
  end;
 
  (* Тип, описывающий список. *)
  TList = record
    PFirst: TPElem;
    PLast: TPElem;
  end;

Процедура пузырчатой сортировки:

Код:
procedure SortBubbleDesc(const aList: TList);
var
  P1, P2, P: TPElem;
  Data: TData;
  F: Boolean;
begin
  if aList.PFirst = aList.PLast then
    Exit;
 
  P := aList.PLast;
  repeat
    F := False;
 
    P2 := aList.PFirst;
    repeat
      P1 := P2;
      P2 := P1^.PNext;
      if P1^.Data < P2^.Data then
      begin
        Data := P1^.Data;
        P1^.Data := P2^.Data;
        P2.Data := Data;
        F := True;
      end;
    until P2 = P;
 
    P := P^.PPrev;
  until not F;
end;

Задача:

Нужно сделать процедурку случайной перестановки элементов списка. Рассортировать кароче
Выручайте. Или хоть намекните как ато щас кирпичи полезут
Ответить с цитированием
  #2  
Старый 11.05.2011, 18:55
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Случайной перестановки? да просто.
Код:
a:=random(N);// N - количество элементов
b:=random(N);
while b=a do 
   b:=random(N); // чтобы никогда не было a=b
Потом меняем местами значения элементов списка A и B.
Делаем этот код столько раз, сколько хочется.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 12.05.2011, 08:34
Sevenfold Sevenfold вне форума
Прохожий
 
Регистрация: 06.05.2010
Сообщения: 9
Репутация: 10
По умолчанию

А если б будет ровняться а с первого захода? Так дело не пойдёт.
Ответить с цитированием
  #4  
Старый 12.05.2011, 10:03
Sevenfold Sevenfold вне форума
Прохожий
 
Регистрация: 06.05.2010
Сообщения: 9
Репутация: 10
По умолчанию

Спасибо за помощь. Я уже нашол решение.
Ответить с цитированием
  #5  
Старый 12.05.2011, 14:54
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Sevenfold,
если B=A с самого начала, то пойдет цикл While b=a. Если b<>a - то эти значения A и B нас устраивают и цикл игнорируется.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter