随机函数(50分)

  • 主题发起人 主题发起人 696151
  • 开始时间 开始时间
6

696151

Unregistered / Unconfirmed
GUEST, unregistred user!
我这里有一个二维表,横坐标是地点,纵坐标是时间,我要从中间取一些
坐标,但有一个限制,就是同一个时间只能选一个地点。怎么选?
 
不明白,你的表存的坐标你直接读出来还是要随机读出来,不管
怎么读,每次读出一个不就行了吗?
 
rondomize;
/*产生伪随机数序列的起点
rondom(x);/*if x=1 then
0<rondom(x)<1 else
rondom(x)为小于x的整数
这是一个伪随机数,不太好
不如用timetostr(time)取秒位更随机
 
不明白
先选出来再判断时间不行吗
 
怎么选?我对随机函数一窍不通!!
 
小猪好不容易挤进来你都不看他的答案?
 
还有啊,实际上你问问题(包括上一个分班的)问的大家都莫名其妙的
 
type
MyPoint=record
t:TMyTime;
p:TMyPlace;
end;
var TimeSet: Array[1..MaxY] of Set of TMyTime;
//TimeSet是一个集合数祖,用来判断是否“同一个时间有一个地点”
Pt:Array[1..MaxCount] of MyPoint;
// MaxX,MaxY是坐标的最大值
......
for i:=1 to MaxYdo
TimeSet:=[];
Randomize;
for i:=1 to Countdo
begin
y:=Random(MaxY);
repeat x:=Random(MaxX) until not ([x] in TimeSet[y]);

TimeSet[y]:=TimeSet[y]+[x];
Pt:=MyMatrix(x,y);
//MyMatrix是你的二维表
end;


 
我的发言怎么只有一半?
补充:
要产生完全的随机数我个人以为最好
是用timetostr(time)截取秒数作为
随机数,用random产生的是伪随机数
 
我的二维表横坐标为5个单位,纵坐标为15个单位。从中间取坐标,每次取6个,
这6个坐标的纵坐标不能相同。要取6次,这36个坐标不能重复,
具体的程序应如何编写?
 
cheka,对不起,你写的我看不懂。写详细一点好吗?:)
 
我来写一个,不知管不管用
const xl=5;
yl=15;
type storp=record
x,y:integer;
end;

var stp:array [1..6,1..6] of storp;/*存放生成的36个点
point:arraty [1..xl,1..yl] of boolean;/*判断该坐标是否已被取得
row:array [1..yl] of boolean;/*判断该行是否已被取过
procedure getpoint(var st:storp;y:integer);
var i,j,m,n:integer;
t:boolean;
begin
rondomize;
for j:=1 to 6do
begin
t:=false;
repeat
n:=rondom(yl)+1;
for i:=1 to yldo
if row[n] then
t:=true;
until (not t);
m:=rondom(xl)+1;
while point[m,n]do
m:=(m+1) mod xl;
/*如生成的点已被取过,直接取下一个点*/
st[y,j].x:=m;
st[y,j].y:=n;
point[m,n]:=true;
end;
end;

procedure main;
var i,j:integer;
begin
for i:=1 to xldo
for j:=1 to yldo
point[i,j]:=false;
for i:=1 to 6do
begin

for j:=1 to yldo
row[j]:=false;
getpoint(stp,i);
end;

end;

 
接受答案了.
 
后退
顶部