Страницы: 1
RSS
Заполнить диапазон неповторяющимися числами в случайном порядке
 
Господа,подскажите,как заполнить диапазон из 50, например, ячеек (десять рядов по пять строк)  неповторяющимися числами от 1 до 50 в случайном порядке?
 
Цитата
ivanptw написал:
десять рядов по пять строк
??? Ряд - это и есть строка )
 
десять по горизонтали,пять по вертикали.
или,в более общем виде,заполнить весь диапазон из a*столбцов и  b*строк
 
Можно сделать макросом - генерить случайные и отсеивать повторы с помощью коллекции или словаря.
 
эти варианты погуглил конечно,но хотелось бы какой-нибудь макрос без отсеивания.
выделил диапазон,ввел числа (от скольки до скольки) и получил таблицу с неповторяющимися числами
 
Цитата
ivanptw написал:  макрос без отсеивания
и как вы себе это представляете?
 
Ну может есть какой компонент например в .Net, который может нагенерить случайных сколько нужно "без отсеивания" и который можно использовать, но я такого не помню.
Я свой макрос когда-то писал, с отсеиванием.
 
2Hugo
можете ссылку скинуть?
Изменено: ivanptw - 08.03.2017 01:24:03
 
Проще заново написать, чем найти тему, если это вообще было на форуме, не помню...
Но сейчас писать не буду.
 
Можно проще - генерим случайные (в пределе от-до) и набираем коллекцию (с ключами) до тех пор, пока не достигнем верхнего предела элементов коллекции (т.е. в данном случае 50).
Затем циклом по коллекции выгружаем всё куда угодно.
Примеров каждого такого шага на форуме полно.
 
Можно реализовать следующий алгоритм:
Заполняем массив всеми элементами (от и до), перемешиваем массив в случайным порядке, заполнять и перемешивать можно одновременно
выводим в нужное месть на листе первые n (n=a*b) элементов массива.

Если требуемое количество элементов не большое, а границы от и до - большие, то легче сделать случайную генерацию с проверкой на уникальность.
 
Как перемешать массив в случайном порядке? Я вижу только такой вариант - заполнить параллельный массив случайными числами, отсортировать оба массива по этому массиву.
Ну т.е. делаем двумерный массив в 2 столбца - в одном числа 1-50, второй заполняем случайными числами, сортируем.
Да, это будет быстрее чем с коллекцией возиться, и уже есть готовые функции сортировки.
 
вариант
Изменено: MCH - 08.03.2017 13:00:23
 
2МСН
спасибо!
то,что нужно!
2Hugo
да,нашел такой вариант для сортировки по двум столбцам,но минус данного решения-нужно потом из столбца выдергивать части и сортировать их в диапазон.
для небольшого количества диапазонов это нетрудно,но для если диапазонов много-ручная сортировка занимает очень много времени.
Изменено: ivanptw - 08.03.2017 13:52:58
 
Да чего там выдёргивать - берёте в цикле и заполняете диапазон - каждый следующий элемент столбца массива в следующую ячейку диапазона. Т.к. цифры случайны - то даже не нужно влиять на то, в каком порядке будет заполняться диапазон.
Страницы: 1
Наверх