Создать массив N*N(нечетно), заполняя его числами от 10 с шагом 10 в последовательности индексов [1,1],[2,1],[3,1] и т.д. по спирали. Затем определить суммы на главной и побочной диагоналях — Pascal(Паскаль)

uses crt;
const nmax=21;
var a:array[1..nmax,1..nmax]of integer;
    n,i,j:integer;
    x,y,num,add,dir:integer;
begin
clrscr;
repeat
write('Введите нечетное n=');
readln(n);
until(n in [1..nmax])and odd(n);
x:=1;
y:=0;
num:=10;
Add:=n;//длина первого отрезка пути
dir:=1;//направление вниз-вправо
while (add<>0) do//пока длина пути больше 0
begin
  i:=0;
  while (i<>add) do//пока не последняя не заполненная по ходу строка
    begin
    y:=y+dir;//вверх-вниз
    a[y,x]:=num;
    num:=num+10;
    i:=i+1;
    end;
  i:=0;
  add:=add-1;
  while (i<>add) do//пока не последний не заполненный по ходу столбец
    begin
    x:=x+dir;//вправо-влево
    a[y,x]:=num;
    num:=num+10;
    i:=i+1;
    end;
  dir:=dir*(-1);//меняем направление
end;
for i:=1 to n do
   begin
     for j:=1 to n do
     write(a[i,j]:6);
     writeln;
   end;
readln
end.

Leave a Comment

29 − = 21