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

Если требуется выбрать случайный вариант однократно, то используется оператор 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'

i = 1
:loop
    $rand = FUNC('Тянуть карту')
    'Шаг №<<i>>. Значение: <<$rand>>'
    i = i + 1
IF i <= 7:
    JUMP 'loop'
END
Вложения:
Скачать этот файл (pullcard.qsp)pullcard.qsp[ ]1 Kb29.05.2011 20:18