我想在Pascal中获得一个在指定范围内的随机数。基本上就是这样:
r = random(100,200);
以上代码将生成一个介于100到200之间的随机数。
有什么建议吗?
内置的Pascal函数只能让你在0到指定范围之间获取一个数字,而我需要指定要返回的最小数字。
我想在Pascal中获得一个在指定范围内的随机数。基本上就是这样:
r = random(100,200);
以上代码将生成一个介于100到200之间的随机数。
有什么建议吗?
内置的Pascal函数只能让你在0到指定范围之间获取一个数字,而我需要指定要返回的最小数字。
只需使用正确范围内的随机数(例如100到200将是范围100),然后将起始值添加到其上
因此:对于您的示例,random(100) + 100
random(200)+100
吗? - Alirandom
函数返回的随机数质量非常低。 - CodesInChaos正如早先指出的,您应该使用
myrandomnumber := random(span) + basenumber;
randomize();
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
使用 RandomRange 或 RandomFrom:
function RandomRange(const aFrom: Integer; const aTo: Integer): Integer;
RandomFrom
从数组 AValues 中返回一个随机元素。返回值的类型与数组元素的类型相同。
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