Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сформировать массив на основе другого по правилу 
:(
    Опции темы
Mechanic
Дата 30.5.2006, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: 6
Всего: 7



Цитата(fara @  30.5.2006,  09:54 Найти цитируемый пост)
помоги пжл! у меня осталось 2 часа чтобы программу дописать

А у меня 3 минуты, чтоб до офиса доехать!  smile  
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
fara
Дата 30.5.2006, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 15.3.2004
Где: С.-Петербург

Репутация: нет
Всего: 2



А сколько тебе до офиса ехать? 
--------------------
Крыша хлопает в ладоши -Спасибо всем за план хороший!
PM MAIL ICQ   Вверх
fara
Дата 30.5.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 15.3.2004
Где: С.-Петербург

Репутация: нет
Всего: 2



Mechanic, ой, я оказывается не заметил что ты добавил комментарий к своему ответу... 
--------------------
Крыша хлопает в ладоши -Спасибо всем за план хороший!
PM MAIL ICQ   Вверх
AriX
Дата 30.5.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: 5
Всего: 19



Если я правильно понял, сделай копию массива, а потом случайным образом выбирай 2 любых элемента и меняй их местами. Повтори n-дцать количество раз. Примерно так
Код

// Делаем копию
for i := 0 to High(Population) do
  Pairs[i] := Population[i];
// Прогоняем 1000 раз обмен элементами
for i := 0 to 1000 do begin
  a := Random(High(Pairs));
  b := Random(High(Pairs));
  Temp := Pairs[a];
  Pairs[a] := Pairs[b];
  Pairs[b] := Temp;
end;
 
PM MAIL   Вверх
fara
Дата 31.5.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 15.3.2004
Где: С.-Петербург

Репутация: нет
Всего: 2



Фишка в том, что если какой-либо элемент из массива population уже был выбрат, то в последующих циклах этот элемент выбран быть не может!

Т.е. Ваш пример не подходит.

Повторю еще раз задачу.
Необходимо элементы массива population случайным образом расфасовать. На выходе должен быть тот же массив population, но элементы (не индексы!) массива уже стоят в другой последовательности.

Пример.
Исх. массив:
population[0] = 5;
population[1] = 12;
population[2] = 24;
population[3] = 14;
population[4] = 58;
population[5] = 29;

Массив после обработки:
population[0] = 24;
population[1] = 58;
population[2] = 14;
population[3] = 5;
population[4] = 12;
population[5] = 29;

или такой:
population[0] = 58;
population[1] = 12;
population[2] = 29;
population[3] = 5;
population[4] = 24;
population[5] = 14;

или так:
population[0] = 29;
population[1] = 12;
population[2] = 58;
population[3] = 5;
population[4] = 24;
population[5] = 14;

а может быть и идентичным исходному. 
--------------------
Крыша хлопает в ладоши -Спасибо всем за план хороший!
PM MAIL ICQ   Вверх
AriX
Дата 31.5.2006, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: 5
Всего: 19



fara, 
Мой код это и сделает.
ЗЫ: Хотя, конечно, можно и лучше написать, но если простенько, то попробуй как я написал. 
PM MAIL   Вверх
fara
Дата 31.5.2006, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 15.3.2004
Где: С.-Петербург

Репутация: нет
Всего: 2



AriX, да, похоже на то.
Я плохо проанализировал Ваш пример.
Спасибо 
--------------------
Крыша хлопает в ладоши -Спасибо всем за план хороший!
PM MAIL ICQ   Вверх
AriX
Дата 31.5.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: 5
Всего: 19



Вообще, по-хорошему можно сделать так (не код, а алгоритм):
Код

var
  // Массивы (или другой набор данных), в которых будут хранится индексы элементов:
  // В Indexes1 - индекс элемента массива Source, который будет копироваться в Destination
  // В Indexes2 - индекс элемента массива Destination, в который будет копироваться элемент из Source
  Indexes1, Indexes2: array of Integer;
..
begin
  // Сначала заполняем оба Indexes
  
  repeat
    // Дальше берем рандомайзом индексы
    a := Random(Length(Indexes1));
    b := Random(Length(Indexes2));

    // Потом удаляем их из Indexes т.е. по этим индексам уже будут скопированы элементы

    // Дальше копируем
    Destination[Indexes2[b]] := Source[Indexes1[a]];
  until Length(Indexes1) = 0;  
end;

Надеюсь, понятно объяснил smile 

Это сообщение отредактировал(а) AriX - 31.5.2006, 17:47
PM MAIL   Вверх
fara
Дата 31.5.2006, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 15.3.2004
Где: С.-Петербург

Репутация: нет
Всего: 2



Я не знаю как удалять smile
А так алгоритм ясен. 
--------------------
Крыша хлопает в ладоши -Спасибо всем за план хороший!
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1274 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.