-3

我的任务

用从 [FROM, TO] 中抽取的随机数填充给定的矩阵/“stringgrids” M1 和 M2,其中 FROM 和 TO 应从给定的编辑字段中读取。

我正在努力在用户给出的值之间生成随机数。这是我所拥有的:

procedure FillGridRandom(var S:TStringGrid); 
var 
  i ,j :integer; //local variables
  A,B:array of array of integer; 
  val1,val2 :integer; 
begin 
  val1 := StrToInt(Form1.Edit1.Text);
  val2 := StrToInt(Form1.Edit2.Text);
  setlength(A,10,10);
  setlength(B,10,8); 
  for i := 0 to s.colcount do begin
    for j := 0 to s.rowcount do begin 
      A[i][j]:= random;
    end; 
  end;
end;
4

1 回答 1

2

如何在用户给出的值之间生成一个随机数?

Random函数有两个重载。不带参数的变体返回 0 到 1 之间的实数值。另一个变体接受整数参数N并返回整数i,例如0 <= i < N. 因此,您可以使用一些算术来生成范围a为的值b

function RandInRange(const a, b: Integer): Integer;
begin
  Result := a + Random(b-a+1);
end;

i这将返回满足a <= i <= b且均匀分布的整数。好吧,分布仅与Random.

请注意,我没有尝试检查或强制执行a <= b.

或者,正如评论中指出的那样,您可以RandomRangeMaths单元中使用。尽管要注意它具有不同的约定并返回 range 中的值a <= i < b


查看其余代码,您不应该使用var参数来传递字符串网格引用。您不会更改参考。您可以调用字符串网格上的方法或访问属性,但您不会修改引用。

至于那个字符串网格,你不用它做任何事情。你填充了一个你立即扔掉的数组。您将需要分配给字符串网格的元素。数组没有意义,可以删除。

于 2014-11-18T14:20:02.610 回答