Другие языки программирования и технологии

Заполнить массив против часовой стрелки начиная с нижнего правого угла размер массива N*N и допустить возможность измене

Заполнить массив против часовой стрелки начиная с нижнего правого угла размер массива N*N и допустить возможность изменения значения N pascal, delphi 7 Как то так 09 08 07 06 05 10 21 20 19 04 11 22 25 18 03 12 23 24 17 02 13 14 15 16 01
DM
Denis Moiseev
296
const Size = 19;
var A : array [1..Size, 1..Size] of Word; Num : Word; N, Row, Col, D : Byte; dRow, dCol : ShortInt;

procedure NextStep;
begin
if dRow = -1 then
begin
if (Row + dRow > 0) and (A[Row + dRow, Col] = 0) then Row := Row + dRow
else begin dRow := 0; dCol := - 1; NextStep; end;
end
else if dCol = -1 then
begin
if (Col + dCol > 0) and (A[Row, Col + dCol] = 0) then Col := Col + dCol
else begin dRow := +1; dCol := 0; NextStep; end;
end
else if dRow = +1 then
begin
if (Row + dRow <= N) and (A[Row + dRow, Col] = 0) then Row := Row + dRow
else begin dRow := 0; dCol := +1; NextStep; end;
end
else { dCol = +1 }
begin
if (Col + dCol <= N) and (A[Row, Col + dCol] = 0) then Col := Col + dCol
else begin dRow := -1; dCol := 0; NextStep; end;
end;
end;

begin
Write('N = '); ReadLn(N);
if Not(N in [1..Size]) then begin WriteLn('1 <= N <= ', Size); Halt; end;
for Row := 1 to N do for Col := 1 to N do A[Row, Col] := 0;
Row := N; Col := N; dRow := -1; dCol := 0; Num := 0;
repeat
Inc(Num);
A[Row, Col] := Num;
if Num < N*N then NextStep;
until Num = N*N;
D := 2; if N > 3 then if N > 9 then D := 4 else D := 3;
for Row := 1 to N do begin for Col := 1 to N do Write(A[Row, Col]:D); WriteLn; end;
end.
Владимир .
Владимир .
78 899
Лучший ответ
пиши в аську 16 95271 4 3
Сергей Антонов
Сергей Антонов
32 502

Похожие вопросы