Delphi 7 中的随机函数 1、RandSeed: 随机数发生的“种子”。如果不赋值那么每次执行产生的随机数列是一样的。 所以该值必须每次调用均应是不同值。 如: unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; i:Integer; //定义一个全局变量i implementation{$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin i:=1; //初始化i end; procedure TForm1.Button1Click(Sender: TObject); begin Randseed:=i+10; //每次点击按钮均重新定义随机数种子 i:=Random(100); label1.Caption:=IntToStr(i); end;end. 2、Randomize: 用当前机器时间作为随机数“种子”初始化随机数发生器。 3、Random(): 由“种子”初始化的随机数出发,开始产生随机数序列。 真随机数生成方法: Randomize方法: var i:Integer; begin Randomize; i:=Random(100); label1.Caption:=IntToStr(i); end; 用当前机器时间作为“种子”初始化随机数发生器来生成(0-100)之间的随机数,每次均不同。 1. 自动随机出题 你也许有这样的经历:孩子刚上学,数学老师要你每天给出10或者20道算术题,作为你孩子的家庭作业,你是否有点烦?别着急,电脑可帮你忙! 在Delphi中,有一随机函数,是这样定义的: function Random [ ( Range: Integer) ]; 其中,参数Range为一整数, 该函数返回值也为整数,其范围为: 0< =Random(Range)< Range (指定Range) 0< =Random< 1 (不带参数Range) 下面的过程for循环里第一条语句:在屏幕上输出九九表内乘法的随机题;第二条语句:在屏幕上输出一百以内的加法随机题。稍加修改,增加一些条件语句你即可得到得减法、除法及四则混合运算的随机题。当然,你也可以直接将结果输出在打印机的画布(Canvas)上,打印给你的孩子做。 procedure Tform1.Button1Click(Sender: TObject); var I: Integer; begin Randomize; for I := 1 to 10 do begin Canvas.TextOut(20,I*20, IntToStr(Random(9)+1)+'×'+IntToStr(Random(9)+1)+'='); Canvas.TextOut(220,I*20, IntToStr(Random(100))+'+'+IntToStr(Random(100))+'='); end; end; 2. 随机产生体育彩票号码 时下体育彩票在全国范围内风行,朋友们买彩票都嫌挑选号码较为头痛,要求我在电脑上想点办法。我想这无非是产生随机数,于是用Delphi的随机函数Random编写了一段程序,具体实现方法见如下程序(SportUnit.pas)。 unit SportUnit; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, forms, Dialogs, StdCtrls, Buttons, ExtCtrls; type Tform1 = class(Tform) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel;//以上用于放置七位号码 BitBtn1: TBitBtn; BitBtn2: TBitBtn; BitBtn3: TBitBtn; Timer1: TTimer; Label8: TLabel; Timer2: TTimer; procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure BitBtn3Click(Sender: TObject); procedure Timer2Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var form1: Tform1; implementation {$R *.DFM} procedure Tform1.BitBtn1Click(Sender: TObject); begin timer1.Enabled:=True; timer2.Enabled:=True; end; procedure Tform1.BitBtn2Click(Sender: TObject); begin timer1.Enabled:=false; timer2.Enabled:=false; end; procedure Tform1.Timer1Timer(Sender: TObject); begin Randomize; Label1.Caption:=IntToStr(Random(10)); Label2.Caption:=IntToStr(Random(10)); Label3.Caption:=IntToStr(Random(10)); Label4.Caption:=IntToStr(Random(10)); Label5.Caption:=IntToStr(Random(10)); Label6.Caption:=IntToStr(Random(10)); //随机产生0-9整数 Label7.Caption:=IntToStr(Random(5)); //随机产生0-4整数,第七位为特别号 Application.ProcessMessages; //处理Windows消息,属简单多线程 end; procedure Tform1.BitBtn3Click(Sender: TObject); begin close; end; procedure Tform1.Timer2Timer(Sender: TObject); begin Label8.Caption:=formatDateTime('yyyy"年"m"月"d "日"dddd',date)+' '+TimeToStr(time); end; end. 此程序段中的定时器Timer2只为显示时间秒而定义,按钮 BitBtn1和 BitBtn2可以只用一个(求逆反运算即可),所以该程序段还可优化精简。 |
|