Показать сообщение отдельно
Старый 16.11.2014, 23:51   #3 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

Задание очень на ваше похоже:
Дана квадратная матрица A порядка M (M — нечетное число). Начиная с элемента A
1,1 и перемещаясь по часовой стрелке, вывести все
ее элементы по спирали: первая строка, последний столбец, последняя
строка в обратном порядке, первый столбец в обратном порядке, оставшиеся элементы второй строки и т.д.; последним выводится центральный
элемент матрицы.

Код:
uses crt;
const nmax=15;
var a:array[1..nmax,1..nmax]of integer;
    m,i,j:byte;
    x,y,add,dir:integer;
begin
clrscr;
repeat
write('Размер матрицы нечетное число до ',nmax,' m=');
readln(m);
until odd(m)and(m in [1..nmax]);
writeln('Матрица:');
for i:=1 to m do
  begin
    for j:=1 to m do
      begin
        a[i,j]:=(i-1)*m+j;{можно по другому заполнить, это для наглядности}
        write(a[i,j]:4);
      end;
    writeln;
  end;
writeln;
x:=0;{выход слева вверху}
y:=1;
Add:=m; {длина начального пути}
dir:=1;{положительное направление}
while (add<>0) do
begin
  i:=0;
  while (i<>add) do
    begin
    x:=x+dir; {влево или вправо}
    write(a[y,x]:4);
    i:=i+1;
    end;
  i:=0;
  add:=add-1;{прошли отрезок, уменьшаем длину}
  while (i<>add) do
    begin
    y:=y+dir;{вниз или вверх}
    write(a[y,x]:4);
    i:=i+1;
    end;
  dir:=dir*(-1);{прошли 2 отрезка меняем направления}
end;
readln
end.
Gruvi вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070