Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 2

Создание массива из случайных целых чисел из определённого промежутка. Числа в массиве не должны повторяться

07.03.2015, 08:55. Показов 3107. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Недавно занялся Visual Basic'ом и столкнулся с такой проблемой.
Дан массив x(100). Ему нужно присвоить целые значения от 0 до 99, но таким образом, чтобы они были разбросаны в случайном порядке и не повторялись. Ну, например, x(0) = 21, x(1) = 16, x(2) = 95, x(3) = 50 и так далее. Но, ещё раз скажу, числа не должны повторяться.
Сделал вот такой код:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim x(100) As Integer
Dim a As Integer
Dim b As Integer
Metka1:
Randomize
For a = 0 To 99
x(a) = Int(100 * Rnd)
Next a
For b = 1 To 98
For a = b To 99
If x(b - 1) = x(a) Then GoTo Metka1
Next a
Next b
If x(98) = x(99) Then GoTo Metka1
Код, по идее, должен быть рабочий, но проблема в том, что значения подбираются очень долго. Когда массив состоит из малого количества значений, то такой код подойдёт, но для большого массива - нет.

Можно ли как-то проще проверить уникальность всех значений массива?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.03.2015, 08:55
Ответы с готовыми решениями:

Подставить вместо звездочек цифры из промежутка от 1 до 9. Числа не должны повторяться. **** / *** = **
Подставить вместо звездочек цифры из промежутка от 1 до 9. Числа не должны повторяться. **** / *** = ** Может у кого уже есть такая...

Инициализировать массив Т случайных целых чисел из промежутка -20 . 20
Инициализировать массив Т случайных целых чисел из промежутка -20 .. 20. Заменить отрицательные элементы на значение -1, а положительные на...

Заполнить двумерный массив не повторяющимися числами. (Числа не должны повторяться в одной строке или столбце)
Заполнить двумерный массив не повторяющимися числами. (Числа не должны повторяться в одной строке или столбце).

8
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
07.03.2015, 09:24
Создать массив из целых чисел от 0 до 99, просто x(i)=i
Создать массив из 100 случайных, просто y(i)=rnd
Отсортировать массив случайных (например, пузырьком), параллельно проделывая те же действия с массивом целых.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
07.03.2015, 09:38
Лучший ответ Сообщение было отмечено Zigger как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Комманда1_Click()
        Dim a As Integer
        Dim b As Integer
        Dim x(99) As Integer
        Dim y(99) As Integer
        
                For a = 0 To 99
                    x(a) = a
                Next a
                
                Randomize
                
                For a = 0 To 99
                    b = Int((100 - a) * Rnd)
                    y(a) = x(b)
                    x(b) = x(99 - a)
                Next a
End Sub
1
0 / 0 / 0
Регистрация: 07.03.2015
Сообщений: 2
07.03.2015, 12:04  [ТС]
Казанский, можно пример кода?

Добавлено через 50 секунд
Alex77755, не подходит. Значения повторяются.

Добавлено через 48 минут
Alex77755, или я не так понял.

Добавлено через 15 минут
Alex77755, разобрался. Спасибо!
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
07.03.2015, 12:30
Лучший ответ Сообщение было отмечено Alex77755 как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Комманда1_Click()
    Dim i&, j&, a&(1 To 100)
    Randomize
    For i = 1 To 100
        j = Int(Rnd * i + 1)
        If i <> j Then a(i) = a(j)
        a(j) = i - 1
    Next i
End Sub
1
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
07.03.2015, 14:50
как всегда m-ch просто гениален
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
07.03.2015, 18:44
Такой вариант без циклов
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Option Explicit
 
Private Sub Form_Click()
Cls
Randomize
Dim Ni As Double, i As Integer
Ni = Fix(Rnd() * 100) 'Расчет первого случайного числа
For i = 0 To 99
Ni = (Ni * 74) - Fix(Ni * (74 / 101)) * 101 ' Ni целое случайное число
If i Mod 25 = 0 Then Print 'разбиваю на 4 колонки
Print Ni - 1;
Next
End Sub
1
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
07.03.2015, 19:07
Цитата Сообщение от Genn55 Посмотреть сообщение
Такой вариант без циклов
...
For i = 0 To 99

Вот без циклов
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub bb()
Dim a()
With CreateObject("excel.sheet").sheets(1).Range("A1:B100")
  .Formula = Array("=RAND()", "=ROW()")
  .Value = .Value
  .Sort .Cells(1), 1, header:=2 'xlascending,xlno
  a = .Application.transpose(.Columns(2))
  .Application.Quit
End With
End Sub
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
07.03.2015, 20:57
До этого я еще не дошел.А цикл у меня только для того,чтобы показать генерируемые числа,а случайное число без повторов расчитывается.Возможно это не лучший вариант но он работает.Цель заполнить массив без цикла не рассматривалась,да и массива у меня нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.03.2015, 20:57
Помогаю со студенческими работами здесь

Вывести на экран все сверхпростые числа из промежутка целых чисел.
1. Разработать: • Подпрограмму, которая в качестве аргумента получает целое число и проверяет, является ли оно простым. ...

Вывести на экран все сверхпростые числа из промежутка целых чисел
Разработать: 1. Подпрограмму, которая в качестве аргумента получает целое число и проверяет, является ли оно простым. ...

Вывести на экран все простые числа из промежутка целых чисел
Используя подпрограмму вывести на экран все простые числа из промежутка целых чисел, определенного пользователем, и их общее количество.

Программа, которая вводит два целых числа, a и b ( a < b ), и выводит через пробел 5 случайных целых чисел на отрезке
Напишите программу, которая вводит два целых числа, a и b ( a &lt; b ), и выводит через пробел 5 случайных целых чисел на отрезке . ...

Сформировать два массива целых чисел; вывести числа, встречающиеся в каждом массиве
сформировать два массива целых чисел определенной длины вывести на печать числа встречающиеся в каждом массиве в паскале


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru