如何获取随机数?
随机数是指理论上没有规律可循、在指定范围内每个数的出现几率相等、无法根据之前的数来预测下一个数的数列。一般随机数生成器的基本原理是:首先初始化一个随机种子,其初始值可以是任意的整数;在每次获取随机数时,以随机种子为基础进行某种特殊的运算,获得一个随机数并返回之,然后再对随机种子进行某种运算,改变随机种子的值。这样,就可以生成许多比较随机的数,但同一个初始值的随机种子将会生成完全相同的随机数列。
Pascal的System单元提供了两个与随机数有关的子程序:Randomize和Random。Randomize过程用于初始化随机种子,其初始值取决于当前的系统时钟。Random函数用于获取随机数,它有两种调用形式:Random,返回一个0到1之间(不包括1)的随机实数;Random(N),返回0至N之间(不包括N)的随机整数,N为Word类型整数。另外,System单元中随机种子变量的标识符为RandSeed,你也可以手动修改它。
随机数在信息学奥林匹克中可用于随机化搜索、穷举等算法,以优化其性能,也可用于在快速排序中选择关键数,以使其快速排序算法的最坏情况没有固定的相应数列。如果你希望使用了随机数的程序对同一个输入数据能有恒定的输出结果,可以设置RandSeed为一个定值。
如何使用FillChar?
System单元的FillChar过程用来把指定内存段中的所有字节赋为相同的值,它通常用来清空数据。FillChar的格式是FillChar(var X; Count: Word; Value),X是指定的内存段,如数组变量,Count是内存段的大小,即字节数,Value是填充的值,可以是Byte、Char或Boolean等单字节类型的值。如果你要把元素类型为Shortint、Integer或Longint的数组清空为0,可以把Value设为0,如果要全部元素赋为-1,可以把Value设为255。下面是一个简单的样例:
var
P: array[0..999] of Longint;
begin
FillChar(P, SizeOf(P), 255);
Writeln(P[999]);
end.
如何使用Move?
System单元的Move过程用来把指定内存段的数据整块复制到另一内存段中,它通常用来成批移动数组元素。Move的格式是Move(var Source, Dest; Count: Word),Source是数据源,Dest是目标内存段,Count是复制的字节数。你不必担心源内存段会和目标内存段重叠或者重合,在这种情况下Move仍然能够正确工作,参考下面的样例:
var
I: Integer;
P: array[0..9] of Longint;
begin
for I := 0 to 9 do P[I] := I;
Move(P[4], P[2], 4 * 6);
for I := 0 to 9 do Writeln(P[I]: 4);
end.