Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Basic / VBA


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Гаряка Асмик
Статус: Бакалавр
Рейтинг: 2363
∙ повысить рейтинг »
Vasiliy83
Статус: Бакалавр
Рейтинг: 1334
∙ повысить рейтинг »
Megaloman
Статус: Бакалавр
Рейтинг: 1053
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Basic/VBA

Номер выпуска:990
Дата выхода:26.02.2010, 06:00
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:344 / 97
Вопросов / ответов:1 / 3

Вопрос № 176820: Здравствуйте Уважаемые Эксперты ! Помогите чайнику ОЧЕНЬ Нужно! ПЛИЗ ! Есть набор чисел в Excel расположенных подряд в столбик 1 2 3 И т.д. 1000000 Нужно перемешать этот массив в хаотичном порядке Заранее благодарен !!!!!!...



Вопрос № 176820:

Здравствуйте Уважаемые Эксперты !
Помогите чайнику ОЧЕНЬ Нужно! ПЛИЗ !
Есть набор чисел в Excel расположенных подряд в столбик
1
2
3
И т.д.
1000000
Нужно перемешать этот массив в хаотичном порядке
Заранее благодарен !!!!!!!!!!!!!!!!

Отправлен: 21.02.2010, 05:46
Вопрос задал: DimasaN, Посетитель
Всего ответов: 3
Страница вопроса »


Отвечает Megaloman, Бакалавр :
Здравствуйте, DimasaN.
У Вас есть натуральный ряд чисел. Вам надо получить массив с этими же числами, перемешанными в хаотичном порядке, при этом ни одно число в массиве не должно дублироавться.
Идея решения: используем генератор случайных чисел, но, чтобы получилась последовательность уникальных чисел, организуем 2 массива:
Mas - c искомой последовательностью,
Ind - для контроля, встречалось ли сгенерированное случайное число ранее
Решение оформлено в виде макроса.
Следует заметить, что, во первых, в моей версии Excel число строк не более 65536. Во вторых, очень большая размерность задачи потребует очень большого времени выполнения.
На моём компьютере для 65536 чисел потребовалось 6 сек. Но время выполнения будет возрастать, скорее всего, нелинейно.
Код:
' Заполняем массив Mas размерности от 1 до N
' уникальными натуральными числами от 1 до N в случайном порядке
' Результат отобразим в заданной колонке таблицы начиная с заданной строки
' Указанная колонка перед выводом очищается от старых данных

Col_Look = "A" ' В какой колонке отображаем результат
Row_Begin = 1 ' Начиная с какой строки отображаем результат

N = 65536 ' Максимальное значение массива


ReDim Mas(1 To N), Ind(1 To N)

For i = 1 To N
Ind(i) = True
Next

i = 0
Randomize
Do While i < N
k = Int((N * Rnd) + 1)
If Ind(k) Then
i = i + 1
Mas(i) = k
Ind(k) = False
End If
Loop

M = Col_Look + CStr(Row_Begin)
Columns(Col_Look).ClearContents
For i = 1 To N
Range(M).Offset(i - 1, 0) = Mas(i)
Next


Файл с решением здесь. Sluch.xls (2.31 Mб) Большой размер файла из-за того, что взят максимальный предел задачи N = 65536
В приложении описание работы генератора случайных чисел из справочной системы VBA.

Приложение:

-----
Нет времени на медленные танцы

Ответ отправил: Megaloman, Бакалавр
Ответ отправлен: 21.02.2010, 11:20
Номер ответа: 259626

Оценка ответа: 5
Комментарий к оценке:
Большое Спасибо Megaloman !!!!
(воспользовался вторым ответом более лёгким для чайника)
Думаю скоро смогу понять и Ваше решение !
Ещё раз Спасибо!!!


Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259626 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Отвечает Устинов С.Е., Профессионал :
    Здравствуйте, DimasaN.

    Можно сделать таким методом (буду считать, что числа записаны в столбике A, начиная с первой строки): напротив первого числа в соседнем столбике (B) пишем формулу
    =СЛЧИС()*100000
    Потом кликаем 2 раза в правом нижнем углу ячейки с формулой (B1), таким образом, весь столбик B заполнится случайными числами. После этого делаете активной ячейку B1 и нажимаете кнопку "Сортировка по возрастанию" или "Сортировка по убыванию". Исходный массив перемешался, можем удалять значения в столбике B (выделяем весь и удаляем).

    Удачи!
    -----
    Ждешь квалифицированного ответа? Задай правильно вопрос!

    Ответ отправил: Устинов С.Е., Профессионал
    Ответ отправлен: 21.02.2010, 12:29
    Номер ответа: 259630

    Оценка ответа: 5
    Комментарий к оценке:
    Круто Большой Рахмат так просто и круто ну и ну !!!!!!!!вот это да !!!!!!!!!!!!!!!

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259630 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Отвечает Andrew Kovalchuk, 5-й класс :
    Здравствуйте, DimasaN.
    Максимальное количество строк - 65536 (миллион из условия - не для excel ).
    Заполнить соседнюю ячейку случайными значениями (=СЛЧИС()) и, выделив оба столбца, отсортировать в любом порядке (по возрастанию/убыванию) второго столбца.
    Нужно заметить, что функция СЛЧИС() генерирует ПСЕВДОслучайную последовательность - так что после сортировки вы получите ПСЕВДОслучайный порядок ваших исходных данных.

    -----
    Временная неудача лучше временной удачи

    Ответ отправил: Andrew Kovalchuk, 5-й класс
    Ответ отправлен: 21.02.2010, 15:36
    Номер ответа: 259636

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 259636 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 03.02.2010

    В избранное