Заполнение матрицы по периметру по часовой стрелке

var
   a:array[1..15,1..15] of integer;
   i,j,m,n,s:integer;
   x,y:integer; {коордтнаты текущей ячейки}
   napr,shag:byte; {направление движения и размер шага соответственно}
begin
 write('Введите количество строк=');
 readln(n);
 write('Введите количество столбцов=');
 readln(m);
 randomize;
 writeln('Матрица');
 for i:=1 to n do
  begin
   for j:=1 to m do
    begin
     a[i,j]:=random(51);      {заполнение матрицы случайными числами и вывод ее на экран}
     write(a[i,j]:4);
    end;
   writeln;
  end;
 x:=0;
 y:=1;
 s:=0;
 napr:=1;
 shag:=n;
 writeln('После заполнения');
 repeat
  begin
   for i:=1 to shag do
    begin
     case napr of
     1: inc(x);     {движемся вниз}
     2: inc(y);     {вправо}
     3: dec(x);     {вверх}
     4: dec(y);     {влево}
     end;
     inc(s);    {увеличиваем счетчик}
     a[x,y]:=s;    {заполняем текущий элемент}
    end;
   inc(napr);  {меняем направление}
   if (napr mod 2=0) then shag:=m-1 else shag:=n-1; {если napr четное, то движемся по кол-ву столбцов, а если нет, то по кол-ву строк}
  end;
 until (napr=5); {до тех пор, пока не пройдем во всех направлениях}
 a[1,1]:=1; {первая клетка окажется заполненной, поэтому возвращаем ей 1}
 for i:=1 to n do
  begin
   for j:=1 to m do
    write(a[i,j]:4);    {вывод матрицы}
   writeln;
  end;
 readln
end.
Теги:
матрица
Добавлено: 21 Сентября 2013 01:52:54 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...