如何在Pascal中获取随机数?

12

我想在Pascal中获得一个在指定范围内的随机数。基本上就是这样:

r = random(100,200);

以上代码将生成一个介于100到200之间的随机数。

有什么建议吗?

内置的Pascal函数只能让你在0到指定范围之间获取一个数字,而我需要指定要返回的最小数字。


5
哇!还有人在用Pascal吗?我自从80年代初就没用过了。 - wallyk
@wallyk请看看能否回答我的另一个问题:)。http://stackoverflow.com/questions/4965977/pascal-syntax-error - Ali
6个回答

14

只需使用正确范围内的随机数(例如100到200将是范围100),然后将起始值添加到其上

因此:对于您的示例,random(100) + 100


如果我想要在100-300之间的数字,那么我应该使用random(200)+100吗? - Ali
是的,绝对正确 - 请注意我不太熟悉Pascal,所以您可能需要清理语法。 - Ralph
1
请注意,在大多数实现中,random 函数返回的随机数质量非常低。 - CodesInChaos

5

正如早先指出的,您应该使用

myrandomnumber := random(span) + basenumber;

然而,为了获得更好的质量随机数,您应该调用
randomize();

一次性,在您的应用程序启动时,初始化随机数生成器。

2
你能不能只声明一个起始变量和一个结束变量,然后随机传递它们?例如:
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


0

使用 RandomRangeRandomFrom

function RandomRange(const aFrom: Integer; const aTo: Integer): Integer;

RandomFrom 从数组 AValues 中返回一个随机元素。返回值的类型与数组元素的类型相同。


-1
首先,我建议你在程序的开头使用Randomize(它会改变选择数字的算法)。
要获取两个数之间的随机数,你需要这样做:
Result:=Min+random(10000)mod max + 1;

我不记得随机数的最大值,所以你可以更改它(这不会影响任何事情)。

通过使用“mod”,您可以从除法随机数和最大值中获得模块。需要加上+1,因为您永远不会得到等于最大值的数字,只有等于max-1的数字,所以您需要写上+1。

祝你好运!


在这种情况下,你还需要 min - 1,否则你永远得不到 min。但是通常在编程中,当我们说“在 X 和 Y 之间”时,我们的意思是“在 X 包含和 Y 不包含之间” - 这简化了很多东西,所以公式只是 min + random(span),不需要加上 1。另外,你的 10000 的边界是任意的,并不适用于所有的 max 值,你应该做 random(max - min)。对于一个通用的解决方案,你还要检查 min <= max,否则会出现问题。 - Thomas

-2
你可以这样做: Int:=Random(100); 它会给出100个随机数。 然后当你显示或使用它时,只需将101添加到整数中,使其在100和200之间。

2
这并没有比4年前的答案多出什么。 - Benjamin Gruenbaum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接