Arrays 用Pascal优化二维数组代码

Arrays 用Pascal优化二维数组代码,arrays,optimization,pascal,multidimensional-array,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

我有一个生成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;
我需要的代码进行优化,使其尽可能小,做同样的功能。有没有办法做到这一点?

从您的陈述“我需要优化代码并使其尽可能小”中,我假设您正在优化代码长度。 抱歉,如果我遗漏了一些内容,但您可以定义一个函数,如

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了。
请注意,这不会提高代码的效率,因为函数调用的缘故,程序的运行会稍微慢一点。

类似的事情往往是编译器特有的。如果性能真的很重要,你可能想尝试手动展开你的循环。我希望它得到优化,仍然有循环,但更少。好的。事情是这样的。我有更大的代码,在生成0和我的部分的循环中有一个循环,我只需要在生成类似模式的代码中生成一个部分。我认为它可能有太多的周期。所以我希望它仍然是一个循环,但以这种模式生成数字。希望这有帮助。如果你需要更多的信息,我会告诉你。我不需要效率,只需要更少的代码。我认为遵循上面的建议是一个好的开始。然后,您将摆脱“for i:=4到10 do…”块。之前的双for循环是初始化,之后的双for循环是输出。我只是优化了我自己。问题是我不了解在2D数组中输入数字的方式,但我知道正确的方式。但是谢谢你的帮助。你确定你的优化程序和旧版本做的一样吗?它做的不同,因为填充我找到的数组的方式必须像上面给出的代码一样。我说的第一个方法是非常错误的。我没有正确地阅读说明。现在它是正确的。我非常肯定。