Delphi常用随机函数

1. Random

function Random [ ( Range: Integer) ];:产生一个0<=X<Range的随机数。例如:

Random(10);  //随机产生一个大于等于0小于10的数

使用Random之前,要先用Randomize过程或RandSeed函数来初始化随机数产生器。

 

2. RandomFrom

function RandomFrom(const AValues: array of Double): Double; overload;
function RandomFrom(const AValues: array of Integer): Integer; overload;
function RandomFrom(const AValues: array of Int64): Int64; overload;
function RandomFrom(const AValues: array of string): string; overload;

从AValues数组中随机返回一个数。使用RandomForm之前,要先用Randomize过程或RandSeed函数来初始化随机数产生器。

 

3. Randomize

procedure Randomize;:初始化内置的随机数生成器。

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    Randomize;
    Edit1.Text := inttostr(Random(90));
end;


4. RandomRange

function RandomRange(const AFrom, ATo: Integer): Integer;:在整数范围内随机产生一个整数。其中,AForm、ATo代表整数范围。使用RandomRange之前,要先用Randomize过程或RandSeed函数来初始化随机数产生器。

 

5. RandomSpeed

var RandSeed: LongInt = 0;:通过为变量赋予指定值保存内置随机数发生器的种子,可以利用Random函数分别产生指定的随机数序列。例如:

RandSeed := GetRand(1,255);  //返回1到255的一个随机数
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
delphi产生随机数2009-07-27 18:58//用delphi产生不重复的随机数 ****************************************************************************************** var aa : array[1..36] of string[2]; //aa数组为需要随机排列的数组,{先把1..36按顺序给aa数组赋值} procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin for i:=1 to 36 do begin aa[i]:=inttostr(i); bb[i]:=inttostr(i); end; end; {随机进行排列} procedure TForm1.Button1Click(Sender: TObject); var i,j:integer; swapa:string[2]; begin randomize; //随机数初始化*一定要有,不然下次运行时候产生的随机数仍然和这次相同* for i:=1 to 36 do begin j:=1+random(36); swapa:=aa[i]; aa[i]:=aa[j]; aa[j]:=swapa; end; //由此得到不重复的随机排列数字 ***************************************************************************************** 如何产生34-456之间的随机数 Randomize; 34+Random(456-34+1); ×××××××××××××××××××//下面是扫雷游戏的一个编法 procedure TForm1.Button1Click(Sender:TObject); begin Randomize; Memo1.Lines.Add(IntToStr(Random(20))); end; ×××××××××××× ***************************************************************************************** 随机数相关的几个函数: 1、RandSeed;//随时机数发生的“种子”。如果不赋值那么每次执行产生的随机数列是一样的。 所以该值必须每次调用均应是不同值。 2、Randomize;//用当前机器时间作为“种子”初始化随机数发生器。 3、Random() ;//由“种子”初始化的随机数出发,开始产生随机数序列 但是Delphi中的Random()产生的是伪随机数,也就是说,程序的两次运行,Random()产生的随机数是一样的。 先运行一下Randomize,再Random就是真正的随机数了 即: Randomize //初始化随机数发生器 Random() ********************************************************************************************* delphi 如何产生不重复随机数 pascal里的随机随机数是指理论上没有规律可循、在指定范围内每个数的出现几率相等、无法根据之前的数来预测下一个数的数列。一般随机数生成器的基本原理是:首先初始化一个随机种子,其初始值可以是任意的整数;在每次获取随机数时,以随机种子为基础进行某种特殊的运算,获得一个随机数并返回之,然后再对随机种子进行某种运算,改变随机种子的值。这样,就可以生成许多比较随机的数,但同一个初始值的随机种子将会生成完全相同的随机数列。 Pascal的System单元提供了两个与随机数有关的子程序:Randomize和Random。 Randomize过程用于初始化随机种子,其初始值取决于当前的系统时钟。 Random函数用于获取随机数 它有两种调用形式: Random,返回一个0到1之间(不包括1)的随机实数; Random(N),返回0至N之间(不包括N)的随机整数,N为Word类型整数。 另外,System单元中随机种子变量的标识符为RandSeed,你也可以手动修改它。随机数在信息学奥林匹克中可用于随机化搜索、穷举等算法,以优化其性能,也可用于在快速排序中选择关键数,以使其快速排序算法的最坏情况没有固定的相应数列。如果你希望使用了随机数的程序对同一个输入数据能有恒定的输出结果,可以设置RandSeed为一个定值。 ************************************************************************************************* 一个变态小算法 ******************************* 比较耗费机时,如果产生的数目少,就不要用这个算法了。 计算的是在一个范围内(如1-1000),随机抽取n个不相等的随机数。我的思想就是先定义一个用来存放的数组(这当然是必须的啦,废话),然后定义了一个二维数组(感觉很浪费空间),这个二维数组是用来存放已经生成随机数的范围,当然不是随意存放了,要按照自然顺序,但这还不必要定义二维的。二维主要是存放一个范围,即某一列的第一行存放的是范围的小值,而第二行存放的是范围的大值。这样新生成的随机数肯定是在范围之外的,因为范围是已生成随机数的范围啊。这样,每次取随机数时,先随机抽取在某两个范围数组值之间,再在这两个范围数组值之间取随机数。基本上就是这样了。 public class random { int count=500; //个数 int min=1; //最小值 int max=1000; //最大值 int[] r=new int[count]; //随机数存储数组 int[][] k=new int[2][count+2]; //存储范围数组,用于判断范围值 //一维数组用来存放范围的小值,二维用来存放大值 int l=0; //存储空间大小 public random() //初始化范围 {k[0][0]=min-1; k[1][0]=min-1; k[0][2]=max+1; k[1][2]=max+1; l=3; } public int ran(){ //来一个可以制造随机整数的东西 return (int)(Math.random()*1000000000); } public void p(int x,int c) //用来比较存储数组 { for(int i=0;i<l;i++){ if(x<k[0][i]){ //小于当前值时插入,数组是按自然顺序存储的 //如果生成的随机数与当前值的偏差为1,与当前值合并 if(k[0][i]-x==1){ k[0][i]=x; if (k[0][i]-k[1][i-1]==1) //如果与前一个范围值的最大值的值差为1与前一个值合并 {k[1][i-1]=k[1][i]; move(l-1,i); l--;} break;} //如果与但前范围值差大于1 else{ for(int j=l;j>i;j--){ //后移数组为插入值留个位置 k[0][j]=k[0][j-1]; k[1][j]=k[1][j-1]; } k[0][i]=x; //插入值 k[1][i]=x; l++; if (k[0][i]-k[1][i-1]==1) //如果插入值与前一个范围值相差1,则与前一个值合并 {k[1][i-1]=k[1][i]; move(l-1,i); l--;} break; }} } } public void move(int m,int n) //与前一个范围值合并的函数 { for(int j=n;j<m;j++){ k[0][j]=k[0][j+1]; k[1][j]=k[1][j+1];} k[0][m]=0; k[0][m]=0; } public void r(){ //生成随机数的主函数 r[0]=ran()%max+min; //插入第一个值 if(r0==1) k[1][0]=r[0]; else{ k[0][1]=r[0]; k[1][1]=r[0];} for(int i=1;i<count;i++){ int z; if(l>2) z=ran()%(l-2); //判断有多少个空隙,就是有多少个范围,然后随机选取一个 else z=0; r[i]=ran2(k[0][z+1],k[1][z]); //在选取的范围中制造随机数 p(r[i],i); } } public int ran2(int x,int y){ //在固定范围内制造随机数 int m=x-y; m=ran()%(m-1); return m+y+1; } /*public static void main(String[] args) { random rr=new random(); rr.r(); for(int i=0;i<rr.count;i++) }*/ }
第1章 窗体与界面设计 1 1.1 菜单应用 2 实例001 在系统菜单中添加菜单项 2 实例002 带历史信息的菜单 3 实例003 菜单动态合并 4 实例004 像“开始”菜单一样漂亮的菜单 5 实例005 多彩的菜单 6 实例006 可以拉伸的菜单界面 8 1.2 工具栏设计 9 实例007 带背景的工具栏 9 实例008 浮动工具栏 10 1.3 状态栏设计 11 实例009 在状态栏中显示检查框 11 实例010 带进度条的状态栏 12 实例011 状态栏中加入图标 13 1.4 导航菜单界面 14 实例012 OutLook界面 14 实例013 带导航菜单的主界面 15 实例014 图形化的导航界面 16 1.5 特色程序界面 18 实例015 类QQ的程序界面 18 实例016 类似Windows XP的程序界面 20 实例017 以图形按钮显示的界面 21 实例018 以树型显示的程序界面 23 实例019 以XPManifest组件显示界面 24 实例020 动态按钮的窗体界面 25 1.6 特殊形状的窗体 26 实例021 非矩形窗体 26 实例022 建立字体形状窗体 28 1.7 多媒体光盘 29 实例023 自动启动的多媒体光盘程序 29 实例024 为触摸屏程序添加虚拟键盘 30 实例025 触摸屏系统 31 1.8 窗体效果 33 实例026 半透明渐显窗体 33 实例027 窗口颜色的渐变 34 实例028 带背景的窗体 35 实例029 为窗体增加边框 36 1.9 窗体动画 37 实例030 窗体中的滚动字幕 37 实例031 动画显示窗体 38 实例032 制作闪烁的窗体 39 实例033 直接在窗体上绘图 40 实例034 动画形式的程序界面 41 实例035 以时钟显示界面窗体 42 1.10 标题栏窗体 44 实例036 标题栏上的按钮 45 实例037 使窗体标题栏文字右对齐 47 实例038 没有标题栏但可以改变大小的窗口 48 1.11 设置窗体位置 49 实例039 不可移动的窗体 49 实例040 设置窗体在屏幕中的位置 50 实例041 始终在最上面的窗体 51 1.12 设置窗体大小 52 实例042 限制窗体大小 52 实例043 获取桌面大小 53 实例044 组件大小随窗体的改变而改变 53 实例045 在窗口间移动按钮 54 实例046 如何实现Office助手 55 1.13 窗体控制技术 56 实例047 在关闭窗口前加入确认对话框 56 实例048 程序在循环中响应界面操作 57 实例049 使用任意组件拖动窗体 58 实例050 动态创建窗体和释放窗体 59 实例051 修改提示字体及颜色 60 1.14 其他技术 61 实例052 窗口融合技术 61 实例053 给MDI窗体加背景 62 实例054 如何关闭MDI类型窗体中的子窗体 63 实例055 向提示框中添加图标 64 第2章 控件应用 67 2.1 TEdit控件应用典型实例 68 实例056 从右至左输入数据 68 实例057 为TEdit控件添加列表选择框 69 实例058 只允许输入数字的TEdit组件 70 2.2 TSpeedButton控件应用典型实例 71 实例059 在TSpeedButton按钮中显示图标 71 实例060 折行显示按钮标题 72 2.3 TMemo控件应用典型实例 73 实例061 设置TMemo组件的边界 73 实例062 TMemo组件的光标定位 74 实例063 得到TMemo中的可见行数 75 2.4 TListBox控件应用典型实例 76 实例064 在TListBox组件间交换数据 76 实例065 为TListBox添加水平滚动条 77 实例066 将数据库数据添加到组合框中 78 实例067 借助绑定控件实现数据选择录入 79 2.5 TListView控件应用典型实例 80 实例068 TListView列表拒绝添加重复信息 80 实例069 将数据库数据添加到TListView控件 82 实例070 用TListView控件制作导航界面 83 实例071 在TListView控件中对数据排序或统计 84 实例072 在TListView组件中绘制底纹 86 实例073 在列表视图中拖动视图项 87 2.6 TTreeView控件应用典型实例 88 实例074 将数据库数据显示到树视图中 88 实例075 用TTreeView控件制作导航界面 90 实例076 TTreeView组件遍历磁盘目录 91 实例077 TTreeView组件在数据库中的应用 92 2.7 TStringGrid控件应用典型实例 94 实例078 程序运行时对
自己购买的教材 零点起航Delphi7基础教程源码 Delphi7是Inprise公司推出的面向对象的可视化编程语言,它提供了大量VCL组件,具有强大的数据库开发和网络编程能力,极大地提高了应用系统的开发速度,是目前最优秀的前端开发平台之一。 本书从基础入手,由浅入深,全面系统地介绍了Delphi7的基本知识。通过实例,详细讲解了常用组件的用法。全书共分13章,分别讲述了Delphi7的集成开发环境、ObiectPascal语法、用户界面设计、多媒体应用、数据库开发和网络编程等方面的知识。 本书内容翔实、图文并茂,强调“边学边做”,具有良好的操作性,适合Delphi初级开发人员使用,也可以作为广大计算机爱好者的参考资料。 第1章 Delphi基础知识 1.1 Delphi的特点 1.2 Delphi7的集成开发环境 1.3 实例——Hello,world! 1.4 小结 第2章 Object Pascal语言基础 2.1 Delphi的编程风格 2.2 标识符 2.3 数据类型 2.4 赋值语句 2.5 过程与函数 2.6 控制语句 2.7 实例——随机加减法测试 2.8 小结 第3章 面向对象编程 3.1 OOP基本概念 3.2 类的基本概念 3.3 类的封装 3.4 类的继承性 3.5 类的多态性 3.6 异常处理 3.7 小结 第4章 应用程序开发框架 4.1 Delphi的文件结构 4.2 单元文件的内部结构 4.3 项目管理 4.4 应用程序类TApplication 4.5 项目的编译和调试 4.6 小结 第5章 基本窗体设计 5.1 Form(窗体)组件 5.2 向窗体中添加组件 5.3 单文档窗体 5.4 多文档窗体 5.5 小结 第6章 基本组件的应用 6.1 组件的概念 6.2 文本输入组件 6.3 按钮及分类组件 6.4 列表组件 6.5 滚动组件 6.6 表格组件 6.7 日期和时间组件 6.8 多选项卡组件 6.9 小结 第7章 用户界面设计 7.1 菜单设计 7.2 工具栏与状态栏 7.3 信息对话框 7.4 对话框组件 7.5 实例——文档编辑器 7.6 小结 第8章 图形图像技术 8.1 画布技术 8.2 图形图像的类和组件 8.3 图形图像编程应用 8.4 使用鼠标绘制图形 8.5 小结 第9章 多媒体技术 9.1 多媒体基础知识 9.2 多媒体组件 9.3 多媒体编程 9.4 小结 第10章 数据库基础 10.1 数据库简介 10.2 SQL结构化查询语言 10.3 Delphi访问数据库的机制 10.4 Delphi的数据库管理工具 10.5 建立第一个数据库应用程序 10.6 小结 第11章 开发数据库应用程序 11.1 数据集组件 11.2 数据控制组件 11.3 人事管理系统开发 11.4 小结 第12章 报表和图表设计 12.1 数据报表的设计 12.2 图表设计 12.3 小结 第13章 网络编程技术 13.1 网络基础知识 13.2 TCP/IP编程 13.3 使用网络函数编程 13.4 小结 参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值