Другие языки программирования и технологии

Надо на VB 6 не повторялись числа которые задумал рандом

Randomize i = Int(Rnd(1) * 30 + 1)переменная i по каждому шелчку на кнопку должно загадываться число от 1 до 30 и оно не должно повторяться как сделать
Доброго времени суток.

Т. е. всего возможно не более 30 щелчков кнопки? Тогда возьмите массив, как предлагается, но заполните его последовательными числами от 1 до 30. Затем в цикле, используя случайные значения в качестве индексов, переставьте элементы массива. Установите индекс массива на первый элемент и по каждому щелчку кнопки просто наращивайте его. В пределах одного прохода массива повторений не будет. Если надо еще раз выполнить программу с новой последовательностью чисел, то просто еще раз выполняете перестановку элементов массива.

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

Удачи!
Алексей Арефьев
Алексей Арефьев
59 613
Лучший ответ
Задайте массив Dim bila(31) as Boolean
Затем при нахождении первого числа (при i= Int(Rnd(1) * 30 + 1) )
сделайте bila( i )=True
Остальные разы проверяйте if bila( i )=True then goto опять искать else bila( i )=True : Print i
Еще сделайте счетчик нажатий, например в J, и проверяйте:
if J=30 then Print "Больше нет вариантов"
рандом это случайное число. тогда вообще нет смысла его использовать, проще заюзать таймер и выкидывать число от того к примеру какая мили секунда. вариантов дохрена. ток зачем? после 10ти щелчков будут выпадать типа 29, 28, 0,1, 2 короч последовательно если некоторых не будет.
Д.
Денис .
7 837
Создайте временный массив для этих чисел и записывайте туда выпадающие случайные числа. Первое - просто так, а последующие - сравнивая числа с имеющимися в массиве, ели такого в массиве нет - значит записать.
Randomize
i = Int(Rnd(1) * 30 + 1)
Randomize i

перестраиваетса рандом на новые тики

Тут вопрос какой должна быть длина етих повторов если больше 30 то сами понимаете.... =)

Похожие вопросы