在Pascal中优化2D数组代码

时间:2013-11-06 18:50:53

标签: arrays optimization pascal multidimensional-array

我有一个生成类似于此

的2D数组的代码
0      0      0      0      0     34     41     43     45      0
0      0      0      0     25     30     35     42     44      0
0      0      0     14     20     26     31     36     40      0
0      0      1      8     15     21     27     32     37      0
0      0      0      2      9     16     22     28     33      0
0      0      0      0      3     10     17     23     29      0
0      0      0      0      0      4     11     18     24      0
0      0      0      0      0      0      5     12     19      0
0      0      0      0      0      0      0      6     13      0
0      0      0      0      0      0      0      0      7      0

用于生成数字的源代码部分是

   j:=3;
   for i:=4 to 10 do
   begin
      ms[i,j]:=wrk;
        wrk:=wrk+1;
         j:=j+1
   end;
     j:=4;
   for i:=4 to 9 do
   begin
      ms[i,j]:=wrk;
        wrk:=wrk+1;
         j:=j+1
   end;
    j:=4;
   for i:=3 to 8 do
   begin
      ms[i,j]:=wrk;
        wrk:=wrk+1;
         j:=j+1
   end;
   j:=5;
   for i:=3 to 7 do
   begin
      ms[i,j]:=wrk;
        wrk:=wrk+1;
         j:=j+1
   end;
     j:=5;
   for i:=2 to 6 do
   begin
      ms[i,j]:=wrk;
        wrk:=wrk+1;
         j:=j+1
   end;
     j:=6;
   for i:=2 to 5 do
   begin
      ms[i,j]:=wrk;
        wrk:=wrk+1;
         j:=j+1
   end;
      j:=6;
   for i:=1 to 4 do
   begin
      ms[i,j]:=wrk;
        wrk:=wrk+1;
         j:=j+1
   end;
     j:=7;
   for i:=1 to 3 do
   begin
      ms[i,j]:=wrk;
        wrk:=wrk+1;
         j:=j+1
   end;
   j:=7;
   for i:=1 to 2 do
   begin
      ms[i,j]:=wrk;
        wrk:=wrk+1;
         j:=j+1
   end;
   j:=8;
   for i:=1 to 2 do
   begin
      ms[i,j]:=wrk;
        wrk:=wrk+1;
         j:=j+1
   end;
    j:=9;
   for i:=1 to 1 do
   begin
      ms[i,j]:=wrk;
        wrk:=wrk+1;
         j:=j+1
   end;

我需要优化代码并尽可能地缩小代码并执行相同的功能。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

从您的陈述“我需要优化代码并尽可能减小代码”我假设您正在优化代码长度。 对不起,如果我错过了什么,但你可以定义一个像

这样的功能
f(j,k,l)
begin
   for i:=k to l do
   begin
      ms[i,j]:=wrk;
        wrk:=wrk+1;
         j:=j+1
   end;
end;

它会使你的代码变得更小,你可以像这样调用函数。

f(3,4,10);
f(4,4,9);
f(4,3,8);
...

请添加详细信息,我暂时没有使用Pascal。 请注意,它不会使您的代码更有效,因为函数调用,程序运行速度会慢一些。