areh писал(а):А я ещё тогда добавлю, что прежде чем функция начнет генерацию массива, необходимо проверить, вдруг диапазон будет из 10 чисел, а в массив надо 20 различных значений занести... произойдет зацикливание
Да, ты абсолютно прав... Надо было об этом подумать...
Есть еще пара замечаний по поводу диапазона и количества элементов. Если количество элементов близко к диапазону, да еще и диапазон большой - ну, например, диапазо=[1, 5000], а размер массива 5003, то будет очень долго выполняться - очень долго будет подбирать уникальный элемент в конце. Поэтому стоит подумать про другой алгоритм.
Если, например, требуется банальная перестановка (то есть размер массива совпадает с размером диапазона), то можно сначала создать упорядоченный массив из чисел. Потом генерить случайное число - это будет номер элемента в массиве. Этот элемент перенести вниз. Проделав так достаточное количество раз получим перемешанный массив...
areh писал(а):И ещё вариант 3 (как рекомендация по поводу програмирования в целом): переделать процедуру в функцию, и возвращать значения, которым будут соответствовать результаты, напримаер, 1 - ошибка, 0 - всё номально
Если просто успех-неуспех, то это, конечно Boolean. А вообще, можно да, Enum'чик завести и возвращать значения из него.
Еще, если писать уж по-взрослому, то хорошо бы и ошибки обрабатывать. Ну, хотя бы так:
- Код: Выделить всё
Public Sub RndArray(ByVal min As Integer, ByVal max As Integer, ByVal nCount As Integer, ByRef arr() As Integer)
On Error Goto errh
.............
exit sub
errh:
m_sError = err.Description
End Sub
А во время вызова что-то вроде такого:
- Код: Выделить всё
If not RndArray(...) then
'показать ошибку
end if
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)