Дана матрица A размера [n*n] из нее сформировать вектора из чисел,стоящих параллельно побочной диагонали. Первый вектор будет состоять из одного числа a[1,1]. Второй из 2х a[2,1],a[1,2] и т.д. Желательно сделать через открытую матрицу — Pascal(Паскаль)

uses crt;
const nmax=20;//макс. размер
type mas=array[1..2*nmax-1] of integer;//вектор
    matr=array[1..nmax] of mas;//массив векторов
var n,i,j,l,k,p:integer;
    a,b:matr;
begin
clrscr;            
randomize;
repeat
write('Размер матрицы до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    a[i,j]:=random(40)+10;
    write(a[i,j]:4);
   end;
  writeln;
 end;
For l:=1 to 2*n-1 do//2*n-1 количество диагоналей, включая побочную
  begin
    if l<=n then//выше побочной и она
      begin
       k:=0;//длина вектора
       for i:=1 to l do
       for j:=1 to l do
       if j=l-i+1 then//если на диагонали
         begin
          k:=k+1;//считаем
          b[l][k]:=a[i,j];//пишем в вектор
         end;
      end
    else if l>n then//тоже ниже диагонали
      begin
       k:=0;
       for i:=l-n+1 to n do
       for j:=l-n+1 to n do
       if j=l-i+1 then
        begin
          k:=k+1;
          b[l][k]:=a[i,j];
         end;
      end;
  write('Вектор диагонали ',l,':');
  for p:=1 to k do write(b[l][p]:4);
  writeln;
 end;
readln
end.

Leave a Comment

− 2 = 3