| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как можно перемешать элементы одномерн. массива? |
| Автор: hedge_hog 22.6.2007, 00:19 |
| Здравствуйте. Знает ли кто есть ли процедура или функция которая переставляет в хаотичном порядке элементы массиа. Или самому нужно алгоритм соченять. |
| Автор: Alexeis 22.6.2007, 09:38 |
| Не слышал про такое. Думаю просто Random() и в цикле переставлять. Добавлено через 1 минуту и 25 секунд Лучше даже пройтись по всем индексам от 1го до последнего, а рэндомом генерить индекс элемента с которым нужно будет обменять текущим. Т.о. поменяют позицию все элементы. |
| Автор: hedge_hog 22.6.2007, 10:21 |
| Alexeis, Rennigth, Огромное СпасиБо. |
| Автор: Alexeis 22.6.2007, 10:26 | ||
Rennigth, раз for i := Low(VDynArray) тогда уже
|
| Автор: Rennigth 22.6.2007, 10:55 | ||||
| Alexeis, а зачем +1? Вылетишь же за пределы массива... Добавлено через 11 минут и 43 секунды Alexeis, забыл что Random
:( Тогда так:
Зачем лишние вычисления Low? |
| Автор: Alexeis 22.6.2007, 11:48 | ||
Вот именно! И я об этом
? когда все динамические массивы и открытые начинаются с "0". Получается непоследовательно, раз используется Low(VDynArray), значит начало может быть не нулем, а раз начало не ноль, то Random легко может вернуть ноль, что будет за пределами массива и вызовет ошибку. |
| Автор: Rennigth 22.6.2007, 12:29 | ||||
Просто считаю хорошей привычкой использовать и для дин.массивов и для стат.массивов использование одной конструкции Low/High. Хоть и пишут:
Но вот так мне кажется менее наглядно:
Просрачность кода увеличивается. Хотя каждому свое. |
| Автор: Alexeis 22.6.2007, 13:02 | ||||
Вооот, очень хорошо, тогда почему же в
индексы массивов неожиданно начали начинаться с нуля, раз предполагается безболезненно переносить на статические? Будешь помнить, что делал универсальную функцию, откопипастишь, а оно начнет глючить и писать в чужую память. Либо универсально, либо уникально. Уникально-универсальные процедуры главный кандидат на трудноуловимые ошибки. Вроде уверен, что все делал универсально, а не работает |