Как получить случайное число в паскале?

Я хочу получить случайное число в паскалях из диапазона. В основном что-то вроде этого:

r = random(100,200);

Приведенный выше код будет иметь случайное число от 100 до 200.

Любые идеи?

Встроенная функция pascal позволяет вам получить число только из диапазона 0-ваш диапазон, в то время как мне нужно указать минимальное число для возврата


person Ali    schedule 11.02.2011    source источник
comment
Вау! Кто-то еще использует Паскаль?! Я не использовал это с начала 1980-х.   -  person wallyk    schedule 11.02.2011
comment
@wallyk, пожалуйста, посмотрите, не могли бы вы ответить на мой другой вопрос :). stackoverflow.com/questions/4965977/pascal-syntax-error   -  person Ali    schedule 11.02.2011


Ответы (5)


Просто получите случайное число с правильным диапазоном (например, от 100 до 200 будет диапазон 100), затем добавьте к нему начальное значение.

Итак: random(100) + 100 для вашего примера

person Ralph    schedule 11.02.2011
comment
Если бы я хотел от 100 до 300, я бы сделал random(200)+100? - person Ali; 11.02.2011
comment
Да, абсолютно верно - обратите внимание, что я не слишком хорошо знаком с паскалем, поэтому вам, возможно, придется почистить синтаксис. - person Ralph; 11.02.2011
comment
Обратите внимание, что в большинстве реализаций random возвращает случайные числа очень низкого качества. - person CodesInChaos; 10.08.2012

Как уже было сказано, вы должны использовать

myrandomnumber := random(span) + basenumber;

Однако, чтобы получить случайные числа лучшего качества, вы должны вызвать

randomize();

один раз при запуске приложения для инициализации генератора случайных чисел.

person Tuncay Göncüoğlu    schedule 13.09.2012

Не могли бы вы просто объявить начальную переменную и конечную переменную и передать их случайным образом? например

var
varMyRandomNumber, x, y := extended;

begin

x := 100;
y := 200;

varMyRandomNumber := random(x,y);
ShowMessage(IntToStr(varMyRandomNumber));
end;

?

Здесь есть хороший пример использования цикла for для установки начального и конечного значений: http://www.freepascal.org/docs-html/rtl/system/random.html

person Gizmo_the_Great    schedule 13.04.2011

в первую очередь рекомендую использовать Randomize в начале программы (меняется алгоритм выбора номера).

Чтобы получить случайное число между некоторыми двумя числами, вам нужно это:

Result:=Min+random(10000)mod max + 1;

Я не помню максимальное значение для рандома, поэтому вы можете изменить его (это ничего не меняет).

Используя «мод», вы получаете модуль из раздела Random и макс. +1 нужен, потому что вы никогда не получите число, которое = max, только число, которое = max-1, поэтому вам нужно написать +1.

Удачи!

person proggamer12    schedule 14.07.2013
comment
В этом случае вам также понадобится min - 1, иначе вы никогда не получите min. Но в целом в программировании, когда мы говорим между X и Y, мы имеем в виду между X включительно и Y исключая - это упрощает кучу вещей, поэтому формула просто min + random(span), нет необходимости в +1. Также ваша граница 10000 является произвольной и не будет работать для всех значений max, вы должны сделать random(max - min). Для решения общего назначения вы также хотите проверить, что min <= max иначе что-то сломается. - person Thomas; 14.07.2013

Вы можете сделать это как Int:=Random(100); это дает 100 случайных чисел. затем, когда вы отображаете его или используете, просто добавьте 101 к этому целому числу, чтобы оно было между 100 и 200.

person hemmothebest    schedule 01.06.2015
comment
Это ничего не добавляет к ответу 4-летней давности. - person Benjamin Gruenbaum; 02.06.2015