Цитата(Alexdel @ 10.02.2010 15:17)
Всем привет! требуется написать прогу для заполнения прямоугольной таблицы размерами n*n по спирали числами от 1 до n*n. Я вот тут кое-что написал но работает не так, как надо... Мозги уже кипят... Помогите плиз кто чем может... Хотя бы намёк сделайте=)
//на PascalABC.net
//Матрица по спирали из любого угла или из центра, по часовой или против часовой
begin
var n:= 3;
var ИзЦентра := 0; // 0 - из угла 1 - из Центра
Var Центр := Ceil(n / 2) - 1; //Координата центра матрицы
var (i, j, Направление, nEven) := (0, 0, 1, n.IsEven ? 1 : 0); // с левого верхнего
if ИзЦентра = 1 then (i, j, Направление, nEven) := (Центр, Центр, 1, 0); // из центра
var Матрица := new integer[n,n];
for var Элемент := 1 to n*n do
begin
Матрица[i,j]:= Элемент; {
[i,j] - с левого верхнего по часовой; из Центра вправо по часовой
[j,i] - с левого верхнего против часовой; из Центра вниз против часовой
[n-1-i,j] - с левого нижнего против часовой; из Центра вправо против часовой
[n-1-j,i] - с левого нижнего по часовой; из центра вверх по часовой
[j,n-1-i] - с правго верхнего по часовой; из Центра вниз по часовой
[i,n-1-j] - c правго верхнего против часовой; из Центра влево против часовой
[n-1-i,n-1-j] - c правого нижнего по часовой; из Центра влево по часовой
[n-1-j,n-1-i] - c правого нижнего против часовой; из центра вверх по часовой
}
case Направление of
1:begin {вправо}
inc(j);
if (Центр - i + ИзЦентра ) = (j - Центр - nEven) then Направление := 2;
end;
2:begin {вниз}
inc(i);
if i = j then Направление := 3;
end;
3:begin {влево}
dec(j);
if (i - Центр) = (Центр - j + nEven) then Направление := 4;
end;
4:begin {вверх}
dec(i);
if (i - 1) = (j - ИзЦентра) then Направление := 1;
end
end;
end;
Матрица.Println;
end.