Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Заполнение матрици по спирали

Автор: klem4 7.01.2006 19:36

Наткнулся на эту задачу в книге олимпиадной, решил сделать сам, код не похож на тот что в нашем FAQ, по этому выкладываю, может кому-нибудь пригодится, алгоритм прост, совершаем обход матрици по "кругу", каждый следующий проход, сокращая его "радиус"

uses crt;
const n = 6;
type
TMx = array[1..n,1..n] of integer;

procedure Print(mx : TMx);
var
i,j : byte;
begin
writeln; writeln;
for i := 1 to n do begin
writeln;
for j := 1 to n do write(mx[i,j]:2,' ');
end;
end;

procedure SpiralFill(var mx : TMx);
var
i,j,c : byte;
begin

i := 1;
j := 1;
c := 0;

repeat

while (j <= n - c) do begin readln(mx[i,j]); inc(j); end;

inc(i); dec(j);

while (i <= n - c) do begin readln(mx[i,j]); inc(i); end;

dec(j); dec(i);

while (j >= 1 + c) do begin readln(mx[i,j]); dec(j); end;

inc( c ); inc(j); dec(i);

while (i >= 1 + c) do begin readln(mx[i,j]); dec(i); end;

inc(j); inc(i);

until c > n div 2;

end;

var
m : TMx;

begin
clrscr;
SpiralFill(m);
Print(m);
readln;
end.

Автор: APAL 7.01.2006 19:52

Так может надо было сразу в FAQ?

Автор: klem4 7.01.2006 19:56

Пускай "Суровый профи" оценит я думаю lol.gif

Автор: volvo 7.01.2006 20:11

А чего его оценивать? Он что, сильно отличается от http://forum.pascal.net.ru/index.php?s=&showtopic=7265&view=findpost&p=52136 ?

Автор: klem4 8.01.2006 17:28

Клон ph34r.gif

Я думаю тогда стоит все в faq добавить ?