ТП 7.0 упор. элементов массива по спирали с правого верхнего элемента против часовой стрел

FasterHarder
Дата: 18.11.2007 19:10:59
I started in 1983, in 2007 i still on a case!

Всем программистам привет! Respect! Направьте на путь истинный в решении следующей задачи: упорядочить элементы матрицы по спирали. Упорядоченность ведется с правого верхнего элемента против часовой стрелки. Я написал алгоритм и закодировал, но что то сердце не спокойно, что все я сделал эффективно и корректно. Результаты получаю правильные, тока вот думаю в каком виде показывать массив полученный по спирали:)?
program SPIRAL;
uses
    crt;
const
    n = 5;
type
    matrix = array[1..n, 1..n] of real;
var
    matr : matrix;
    i, j : integer;
    k : integer;
begin
    clrscr;
    {заполняем матрицу случайными вещественными числами и выводим на экран}
    for i := 1 to n do
    begin
        for j := 1 to n do
        begin
            matr[i, j] := (random(501) + -250) / pi;
            write(matr[i, j]:6:2, ' ');
        end;
        writeln;
    end;
    {пытаемся вывести в спиральном порядке, начиная с верхнего правого элемента против часовой стрелки}
    k := 1;
    j :=1;
    writeln;
    writeln('Массив при выводе по спирали: ');
    for i := 1 to n do
    begin
        write(matr[i, j]:6:2, ' ');
    end;
    writeln;

    while true do
    begin
        for j := (k + 1) to (n - k + 1) do
        begin
            write(matr[i, j]:6:2, ' ');
        end;
        writeln;

        for i := (n - k) downto k do
        begin
            write(matr[i, j]:6:2, ' ');
        end;
        writeln;

        for j := (n - k) downto (k + 1) do
        begin
            write(matr[i, j]:6:2, ' ');
        end;
        writeln;

        inc(k);
        if(k = n) then
        begin
            break;
        end;
        for i := k to (n - k + 1) do
        begin
            write(matr[i, j]:6:2, ' ');
        end;
        writeln;
    end;

    readln; {задержка программы}
end.

Подскажите как быть то?
P.S. в инете готового решения не обнаружил, так же очень далеко уезжаю на writeln, думаю что не есть также гуд.
Альт
Дата: 18.11.2007 19:37:45
FasterHarder
I started in 1983, in 2007 i still on a case!
Всем программистам привет! Respect!

на ваши вопросы я буду отвечать только в присутствии вашего психиатора
andreymx
Дата: 18.11.2007 20:03:18
Если бы я творил что-нибудь подобное, я бы попытался сделать линеный массив [1..n*n], в котором бы реализовал соответствие моего понимания "по спирали с верхнего правого угла".
Ну и графические диаграммы бы не помешали бы мне в первую очередь - для понимания того, что я пишу.
matrix
abcde
12345
678910
1112131415
1617181920
2122232425
matrix_Line: n,n-1,n-2,n-3,n-4,n+1,n+11, ... .
или в виде
matrix_Line: 5,4,3,2,1,6,11,16,21,22, ... .
FasterHarder
Дата: 18.11.2007 20:05:20
I started in 1983, in 2007 i still on a case!

прошу прощения, ведется с левого верхнего угла, но принципиально ничего не меняется :).