Задача такая: имеется целочисленная переменная, допустим диапазон чисел будет от 1 до 10.
Каждые 2 сек. нужно выдавать рандомное значение этой переменной от 1 до 10, при этом чтобы значения не повторялись пока все значения не будут выданы, только gui

Принятый ответ

easypeasy, что не понятно?
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
13
4 года назад
0
TheMilka, не подскажешь, пожалуйста, как?
2
7
4 года назад
2
easypeasy:
TheMilka, не подскажешь, пожалуйста, как?
cейчас. нужно время. на гуи работать дольше.

создаешь две глобальные переменные А и MAX.
Создаёшь вот такой триггер.
Получить случайное число из списка без повторений командой GetRandomInteger().
Если числа закончились, будешь получать нули.
Загруженные файлы
2
28
4 года назад
2
Есть переменная InitialTop, изначально равна 9.
Есть массив Initial, где в ячейках с 0 по 9 находятся значения 1 - 10 без повторений.
Теперь о самом выборе случайного значения.
  1. Присваиваем переменной idx случайное значение с 0 по InitialTop.
  2. Переменной Result присваиваем значение из Initial[idx].
  3. Присваиваем Initial[idx] значение Initial[InitialTop].
  4. Присваиваем InitialTop значение (InitialTop - 1).
  5. Если InitialTop равно -1, то тогда сбрасываем массив Initial и InitialTop в начальное состояние.
0
13
4 года назад
0
TheMilka, половина не понял, а в этом триггере сработает сразу 10 циклов?только как выдать только 1 значение и спустя какое то время или событие, выдать другое

Присваиваем Initial[idx] значение Initial[InitialTop].
Присваиваем InitialTop значение (InitialTop - 1).
Если InitialTop равно -1, то тогда сбрасываем массив Initial и InitialTop в начальное состояние.
а это случайно не значит что если первое число, например, выпадет 6 то последующие выпадающие будут меньше 6?

ладно, спасибо буду разбираться
2
7
4 года назад
2
easypeasy:
TheMilka, половина не понял, а в этом триггере сработает сразу 10 циклов?только как выдать только 1 значение и спустя какое то время или событие, выдать другое

Присваиваем Initial[idx] значение Initial[InitialTop].
Присваиваем InitialTop значение (InitialTop - 1).
Если InitialTop равно -1, то тогда сбрасываем массив Initial и InitialTop в начальное состояние.
а это случайно не значит что если первое число, например, выпадет 6 то последующие выпадающие будут меньше 6?

ладно, спасибо буду разбираться
эта система создаёт 10 значений. из них ты каждым вызовом берёшь рандомное без повторений. можно ещё добавить, чтобы система обновлялась каждый раз, когда числа внутри ней заканчиваются.
2
28
4 года назад
2
а это случайно не значит что если первое число, например, выпадет 6 то последующие выпадающие будут меньше 6?
Нет, результат хранится в переменной Result.
0
13
4 года назад
0
TheMilka, PT153, в итоге запилил такой рабочий вариант, без действия wait при быстром нажатии Esc варик крашится, а с действием wait 0 почему то нет
Загруженные файлы
2
26
4 года назад
Отредактирован Extremator
2
easypeasy, что не понятно?
Принятый ответ
0
13
4 года назад
0
Extremator, отвечаю не пойму как после действия Set Max=(Max-1) последующие выпадающие числа могут быть больше текущей выпавшей..
3
26
4 года назад
Отредактирован Extremator
3
easypeasy, тебе выпадает например число 7 в Random от 1 до 10 (т.е. до Max).
Ты берёшь Value[7], оно равно числу 7.
После использования ты пишешь set Value[Random] = Value[Max]
т.е. Value[7] = Value[10] ... т.е. ты даёшь Value[7] значение 10
Теперь у тебя записаны числа 1 2 3 4 5 6 10 8 9 10
Дальше ты делаешь Max = Max - 1 и оно становится равно 9
т.е. в следующий раз рандомить будет от 1 до 9
10й номер со значением 10 участвовать не будет
но само число 10 будет использоваться в 7м номере
Остаётся 1 2 3 4 5 6 10 8 9 - т.е. все 9 цифр, кроме цифры 7
В следующий раз ты получаешь Random и тебе выпадает число 3
Ты используешь значение Value[3] (там число 3)
После этого ты заменяешь значение в слоте 3 на то что у тебя в последнем (в 9)
set Value[Random] = Value[Max]
т.е. Value[3] = Value[9]
Тут ты уже имеешь слоты с числами 1 2 9 4 5 6 10 8 9
Дальше опять делаешь ( Max - 1 ) и устраняешь крайнюю девятку
Остаётся 1 2 9 4 5 6 10 8 - т.е. уже 8 чисел
при этом среди низ нет 3 и нет 7
и так далее... в итоге ты дойдёшь до рандома между 1 и 1 ... и получишь 1, тогда твой Value[1] будет иметь значение последнего числа, которое до сих пор не выпало и/или перезаписывалось.
Дальше ты можешь опять вызвать первый триггер, для того что бы он записал тебе Max=10 и все остальные варианты переменных (Value[x]=x).
5
24
4 года назад
5
Extremator, рекомендую небольшое улучшение алгоритма - не просто записывать последнюю ячейку в выпавшую, а менять их местами. Тогда можно будет массив использовать повторно, не заполняя его заново.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.