在Pascal代码中修改2D数组

时间:2013-11-04 20:43:35

标签: arrays optimization 2d output pascal

我有一个pascal代码,它会生成一个如下所示的2D数组:

    { . . . 1 2 3 . . . . }
    { . . 4 5 6 . . . . . }
    { . 7 8 9 . . . . . . }
    {101112 . . . . . . . }
    {1314 . . . . . . . . }
    {15 . . . . . . . . . }
    { . . . . . . . . . . }
    { . . . . . . . . . . }
    { . . . . . . . . . . }
    { . . . . . . . . . . }

每个点代表一个0或一个空位,它在我的代码中以2d数组10x10输出。

我需要修改它来生成像这样的2d数组(可能会改变):

    { . . . . . 9 162433. }
    { . . . . 4 10172534. }
    { . . . 2 5 11182635. }
    { . . 1 3 6 12192736. }
    { . . . 4 7 13202837. }
    { . . . . 8 14212938. }
    { . . . . . 15223039. }
    { . . . . . . 233140. }
    { . . . . . . . 3241. }
    { . . . . . . . . 42. }

让它在一个循环中运作。

这是我写的代码。我被卡住了,我只需要修改它的一部分来生成一种新的数组。它也在这里突出显示。

    program massiv2;
    const   num=10;   {masiva izmers}
    var
    oper,         { izpildama programmas operacija }
                              { oper=3333 beigt                }
        i,j :   integer;    {darba imdeksi }
        wrk: integer ;
        ms: array[1..num, 1..num] of integer;{array}
     label MENU, BEIGAS;
     begin
     MENU:
writeln;
writeln( 'Programma domata ciklu operatoru un masivu apgusanai ');
writeln( ' 3333 - beigt');
writeln( ' jebkurs cits skaitlis aizpildit masiva prasito dalu ');
writeln( ' ar vertibam 1 2 3 ... pa horizontali ');
read( oper);
if oper=3333 then goto BEIGAS;
{array operation and calcalus }
       for i:=1 to num do
       for j:=1 to num do
  ms[i,j]:=0;
       wrk:=1;                                     
       for i:=1 to 6 do {cycle by rows}          //Modified needed only this part
         begin                                   //
        j:=5-i; if j<1 then j:=1;                //  
        while(j <= 7-i) do {cycle by column}     // 
          begin                                  //  
            ms[i,j]:=wrk;                        // 
            wrk:=wrk+1;                          //  
                                                 // 
             j:=j+1                              //
          end;                                   //
    end;
       for i:=1 to num do  {array output}
         begin writeln;
               for j:=1 to num do
               write( ms[i,j]:7)
         end;
         writeln;   writeln(' Lai turpinatu ievadi jebkuru skaitli ');
         read(j);
        goto MENU;
      BEIGAS:
        end.

如何在该代码中创建这种二维数组呢?

    { . . . . . . . . . . }
    { . . . . . . . . . . }
    { . . 212019181716. . }
    { . . . 109 8 7 15. . }
    { . . . . 3 2 6 14. . }
    { . . . . . 1 5 13. . }
    { . . . . . . 4 12. . }
    { . . . . . . . 11. . }
    { . . . . . . . . . . }
    { . . . . . . . . . . }

1 个答案:

答案 0 :(得分: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;

它看起来像这样:

  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

另一个问题是如何优化代码以使其comapact更小。