ИнформАрхив QSP

Выбор случайных вариантов - тянем карты из колоды [1.0]

Эта статья устарела. Похожая статья в справочнике: тянем карту из колоды

Если требуется выбрать случайный вариант однократно, то используется оператор RAND. Но если стоит задача сделать последовательный выбор случайных вариантов из заранее сформированного массива значений, то одним только RAND не обойтись. При каждом последующем выборе нужно будет "помнить", какие значения были уже выбраны.

Эта задача схожа с последовательным вытягиванием карт из колоды.

Решение, оформленное в виде пользовательской функции:

! Запрашиваем длину массива
_length = ARRSIZE('$random')
! Если вариантов уже нет, возвращаем 'ERROR'
IF _length = 0:
    $RESULT = 'ERROR'
    EXIT
END

! Выбираем из массива случайный элемент, соотв. длине массива
_variant = RAND(0, _length-1)
! Запоминаем результат
$RESULT = $random[_variant]

! Удаляем отработанный элемент
KILLVAR '$random', _variant

Тестовый пример использования:

$random[0]='A'
$random[1]='B'
$random[2]='C'
$random[3]='D'
$random[4]='E'
$random[5]='F'
$random[6]='G'

= 1
:loop

    $rand_ = FUNC('Тянуть карту')
    'Шаг №<<i>>. Значение: <<$rand_>>'
    i = i + 1
IF i <= 7:
    JUMP 'loop'
END

pullcard.qsp

Автор: NEX

29.05.2011 20:05