Дана квадратная матрица. Получить вектор, элементами которого являются суммы элементов всех диагоналей, параллельных побочной (включаю побочную диагональ) — Pascal(Паскаль)

Для откладки программы элементы массива сформировать с помощью генератора случайных чисел.

program PascalGuru;

var
  A: array [1 .. 100, 1 .. 100] of integer;
  vector: array [1 .. 100] of integer;
  n, i, j, m: integer;

procedure min(n: integer; var nv: integer);
{ процедура выводящая суммы/ nv=кол-ко сумм диагоналей }
var
  i, j, p, pk, sum, index, sumarno: integer;
  { нужные переменные для вычисления }
  ot: array [1 .. 100] of integer;
begin
  pk := 1;
  sumarno := 0; { обнуляем переменную ОБЩЕЙ суммы по всем диагоналям }
  for i := 1 to 100 do
    if i mod 2 = 0 then
    begin
      inc(pk);
      ot[pk] := i;
    end; { вычисляем номера диагоналей }
  index := 0; { обнуляем переменную индексов диагоналей }
  for p := 1 to ot[n] + 1 do { цикл номеров диагоналей }
  begin
    sum := 0; { обнуляем переменную суммы текущей диагонали }
    for i := 1 to n do
      for j := 1 to n do
        if i + j - 1 = p then
          sum := sum + A[i, j]; { вычисляем сумму текущей диагонали }
    inc(index); { +1 переменной индексов диагоналей }
    vector[index] := sum; { записываем сумму в вектор }
    sumarno := sumarno + sum;
    { увеличиваем переменную ОБЩЕЙ суммы по всем диагоналям - на текущ.     сумму }
    writeln('Summa "', index, '" paralelinoi p.diagonali= ', sum);
    { текущ. сумму выводим на  экран }
  end;
  writeln;
  writeln('Summa vsex diagonalei= ', sumarno);
  { выводим на экран результат ОБЩЕЙ суммы по всем диагоналям }
  nv := index;
end;
{ *********************///*************************** }

begin
  randomize;
  write('N= ');
  readln(n); { ввод размера матрицы }

  for i := 1 to n do
    for j := 1 to n do
      A[i, j] := (-3) + random(9); { заполнение элементов матрицы }

  for i := 1 to n do
  begin
    writeln;
    for j := 1 to n do
      write(A[i, j]:8);
  end; { вывод матрицы на экран }

  writeln;
  writeln;
  min(n, m); { ***вызов процедуры, выводящей суммы*** }

  writeln;
  writeln('Vector iz summ:');;
  for i := 1 to m do
    write(vector[i]:8); { вывод вектора из сумм диагоналей }

  readln;

end.

Leave a Comment

61 − 60 =