怎样动态调整循环方式? (50分)

  • 主题发起人 主题发起人 devil-li
  • 开始时间 开始时间
D

devil-li

Unregistered / Unconfirmed
GUEST, unregistred user!
一个二维数组A[1..8,1..8],现在要对它里面的每一个元素操作
for i:=1 to 8do
for j:=1 to 8do
许多语句关于,i,j.....
但是这样只实现了一种搜索顺序,而实际上共有8种顺序。
现在我想让搜索顺序随机
就要这样写:
Dir:=Random(8);
case Dir of
0:
for I := 1 to 8do
for J := 1 to 8do
许多语句关于,i,j.....
1:
for I := 8do
wnto 1do
for J := 1 to 8do
许多语句关于,i,j.....
2:
for I := 1 to 8do
for J := 8do
wnto 1do
许多语句关于,i,j.....
3:
for I := 8do
wnto 1do
for J := 8do
wnto 1do
许多语句关于,i,j.....
4:
for J := 1 to 8do
for I := 1 to 8do
许多语句关于,i,j.....
5:
for J := 1 to 8do
for I := 8do
wnto 1do
许多语句关于,i,j.....
6:
for J := 8do
wnto 1do
for I := 1 to 8do
许多语句关于,i,j.....
else
for J := 8do
wnto 1do
for I := 8do
wnto 1do
许多语句关于,i,j.....
end;

有没有简便的方法动态实现?
 
为何不将CASE里的语句写成函数呢?这样不就简单多了吗!!
 
如果只有一次使用到Dir。Case语句可放在循环体里
 
var
i, j, ci, cj: Integer;
tp: Integer;
begin
tp := random(8);
case tp of
0: begin
i := 1;
j := 1;
ci := 1;
cj := 1;
end;
1: begin
i := 8;
j := 1;
ci := -1;
cj := 1;
end;
2: .....
.....
end;
while (i>=1) and (i <= 8)do
begin
while (j >= 1) and (j <= 8)do
begin
// 许多语句关于,i,j.....
inc(j, cj);
end;
inc(i, ci);
end;
end;
 
Pearl.,你的方法只能判断四种方向,i,j哪一个先循环怎么动态实现?
 
如果用函数,对于Continue,Break,Exit这样一些语句,就要用返回值判断,比较麻烦
 
后退
顶部