我有一个帕斯卡代码,它生成一个 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.
我如何在该代码中制作这种 2D 数组?
{ . . . . . . . . . . }
{ . . . . . . . . . . }
{ . . 212019181716. . }
{ . . . 109 8 7 15. . }
{ . . . . 3 2 6 14. . }
{ . . . . . 1 5 13. . }
{ . . . . . . 4 12. . }
{ . . . . . . . 11. . }
{ . . . . . . . . . . }
{ . . . . . . . . . . }
好的,
我发现如何做这里的第一个是行工作与想要的不同,但确实如此。
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
另一个问题是,有办法优化代码以使其更小。