powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Генерация уникальных случайных чисел для таблицы
8 сообщений из 8, страница 1 из 1
Генерация уникальных случайных чисел для таблицы
    #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
Генерация уникальных случайных чисел для таблицы
    #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
Генерация уникальных случайных чисел для таблицы
    #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
Генерация уникальных случайных чисел для таблицы
    #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
Генерация уникальных случайных чисел для таблицы
    #39433765
можно основной цикл крутить до Size-1.
...
Рейтинг: 0 / 0
Генерация уникальных случайных чисел для таблицы
    #39433768
...хотя основная ошибка в ar(j) = ar(i). Ведёт к дублированию элементов.
...
Рейтинг: 0 / 0
Генерация уникальных случайных чисел для таблицы
    #39433771
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да опечатка это обычная, любому понятно, что там простой обмен элементов. Должно быть:
Код: vbnet
1.
2.
3.
    ar(0)=ar(i)
    ar(i)=ar(j)
    ar(j)=ar(0)
...
Рейтинг: 0 / 0
Генерация уникальных случайных чисел для таблицы
    #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
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Генерация уникальных случайных чисел для таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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