icerlau 发表于 2014-1-6 15:31:53

求解(最好甲鱼老师能给解释下)

procedure TForm3.Button1Click(Sender: TObject);
var
   arr : array of integer;
var
   i ,a,b : integer ;
begin
    Randomize;// 功能需讲解一下,解决之前随机数不“随机”问题
    edit1.Text :='';
    edit2.Text :='';
    edit3.Text :='';
    for i := 1 to 10do
    begin
      arr:= i;
      edit1.Text :=inttostr(arr)+',' +Edit1.text;   
    //arr:= Random(90)+10;
    //Edit1.Text:= Edit1.Text + IntToStr(arr) + ',';   
    end;
      edit1.Text :=copy (edit1.Text, 1,length(edit1.text)-1 );   
a :=arr;
   b := 1;
fori := 2 to 10 do
begin
if (a < arr) then
begin
   a := arr;
    b :=i;
end;

end;
edit2.Text:=inttostr(a);
edit3.Text:=inttostr(b);

end;
为什么 edit1.Text :=inttostr(arr)+',' +Edit1.text;    这样写,和Edit1.Text:= Edit1.Text + IntToStr(arr) + ',';这写得出的结果是反着的?   

小甲鱼 发表于 2014-1-6 15:40:40

Q1:Randomize 语句初始化随机数生成器。如果不使用 Randomize,则第一次调用 Rndom 函数时,它将使用相同的数字作为种子值,随后使用最后生成的数值作为种子值。建议每次取随机值的时候,先用Randomize,再用random,因为Randomize是起初始化作用的。如果只用random,比如:随机取100次,你就会发现有很多都在一个比较接近的范围,使得随机行显得稍差!

大白话解释就是人工是没办法弄出完全的随机数,只能通过随机算法尽可能的模拟随机数,随机算法需要一个随机的种子数作为开关,Randomize就是生成这个种子~

Q2:反过来写肯定是反着的咯~

icerlau 发表于 2014-1-6 17:12:24

我的结果是这样反的啊:10,9,8,7,6,5,4,3,2,1:sad

老小孩 发表于 2014-1-7 17:32:24

小甲鱼 发表于 2014-1-6 15:40 static/image/common/back.gif
Q1:Randomize 语句初始化随机数生成器。如果不使用 Randomize,则第一次调用 Rndom 函数时,它将使用相同的数 ...

回复他就是因为他是VIP吗:huffy:

小甲鱼 发表于 2014-1-7 17:54:11

icerlau 发表于 2014-1-6 17:12 static/image/common/back.gif
我的结果是这样反的啊:10,9,8,7,6,5,4,3,2,1

对的呀,拼接的顺序倒了嘛。

例如'ABC' + 'D' == 'ABCD',但'D' + 'ABC' == 'DABC'

icerlau 发表于 2014-1-8 01:29:12

对哦~3Q~老师好耐心啊
页: [1]
查看完整版本: 求解(最好甲鱼老师能给解释下)