0

このような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;

コードを最適化してできるだけ小さくし、同じ機能を実行する必要があります。それを行う方法はありますか?

4

1 に答える 1

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 を使用していません。コードがより効率的になるわけではないことに注意してください。関数呼び出しのために、プログラムの実行が少し遅くなります。

于 2013-11-06T19:39:08.753 に答える