Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Генерация уникальных случайных чисел для таблицы / 8 сообщений из 8, страница 1 из 1
05.04.2017, 18:03
    #39433704
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация уникальных случайных чисел для таблицы
Нужна помощь экспертов. Требуется генерировать случайный порядок чисел от 1 до 25 в таблице размером 5x5.
Генерировать то получается, но присутствуют повторы. А вот как генерировать для диапазона таблица уникальные числа? Короче, чтобы не было в ней повторов.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub GenerateRandomNumbers()
  Dim iRundNum As Integer, iMinNum As Integer, iMaxNum As Integer
  Dim rngTab As Range, rngCell As Range
'
  iMinNum = 1: iMaxNum = 25
  Set rngTab = Range("B2:F6")
  For Each rngCell In rngTab
    Randomize
    iRundNum = Int(iMinNum + (Rnd() * iMaxNum))
    rngCell.Value = iRundNum
  Next
  Set rngCell = Nothing
  Set rngTab = Nothing
End Sub


...
Рейтинг: 0 / 0
05.04.2017, 19:39
    #39433754
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация уникальных случайных чисел для таблицы
Стандартный метод - генерация массива требуемого размера, а потом его случайное перемешивание. Ну что-то вроде:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
dim ar(0 to 25)
for i = 1 to 25
    ar(i)=i
next i
for i = 1 to 25
    j=25*rnd
    ar(0)=ar(i)
    ar(j)=ar(i)
    ar(i)=ar(0)
next i
i=1
For Each rngCell In rngTab
    rngCell.Value = ar(i)
Next
...
Рейтинг: 0 / 0
05.04.2017, 19:40
    #39433755
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация уникальных случайных чисел для таблицы
Пардон, строку пропустил

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
dim ar(0 to 25)
for i = 1 to 25
    ar(i)=i
next i
for i = 1 to 25
    j=25*rnd
    ar(0)=ar(i)
    ar(j)=ar(i)
    ar(i)=ar(0)
next i
i=1
For Each rngCell In rngTab
    rngCell.Value = ar(i)
    i=i+1
Next
...
Рейтинг: 0 / 0
05.04.2017, 20:17
    #39433764
Генерация уникальных случайных чисел для таблицы
На словах у Akina правильно, но в реализации j вычисляется неверно, и получается совсем не перемешивание.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Public Sub Test()
 Dim ar() As Long
 Dim Size As Long
 Dim i As Long
 Dim j As Long
 Dim tmp As Long
 
 Size = 25
 ReDim ar(1 To Size) As Long
 
 For i = 1 To Size
    ar(i) = i
 Next i
 
 Randomize

 For i = 1 To Size
    j = Int((Size - i + 1) * Rnd + i) 'перемешивать надо хвост массива
    tmp = ar(i)
    ar(i) = ar(j)
    ar(j) = tmp
 Next i

 'далее вывод ar() на лист, например
End Sub
...
Рейтинг: 0 / 0
05.04.2017, 20:22
    #39433765
Генерация уникальных случайных чисел для таблицы
можно основной цикл крутить до Size-1.
...
Рейтинг: 0 / 0
05.04.2017, 20:34
    #39433768
Генерация уникальных случайных чисел для таблицы
...хотя основная ошибка в ar(j) = ar(i). Ведёт к дублированию элементов.
...
Рейтинг: 0 / 0
05.04.2017, 20:57
    #39433771
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация уникальных случайных чисел для таблицы
Да опечатка это обычная, любому понятно, что там простой обмен элементов. Должно быть:
Код: vbnet
1.
2.
3.
    ar(0)=ar(i)
    ar(i)=ar(j)
    ar(j)=ar(0)
...
Рейтинг: 0 / 0
05.04.2017, 21:04
    #39433774
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация уникальных случайных чисел для таблицы
13-й квартал, Akina. Ребята спасибо, работает

На словах у Akina правильно, но в реализации j вычисляется неверно, и получается совсем не перемешивание.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Public Sub Test()
 Dim ar() As Long
 Dim Size As Long
 Dim i As Long
 Dim j As Long
 Dim tmp As Long
 
 Size = 25
 ReDim ar(1 To Size) As Long
 
 For i = 1 To Size
    ar(i) = i
 Next i
 
 Randomize

 For i = 1 To Size
    j = Int((Size - i + 1) * Rnd + i) 'перемешивать надо хвост массива
    tmp = ar(i)
    ar(i) = ar(j)
    ar(j) = tmp
 Next i

 'далее вывод ar() на лист, например
End Sub


...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Генерация уникальных случайных чисел для таблицы / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]