Заданны массивы А(4,4)и B(5,5). Для каждого массива вычислить среднее арифметическое положительных элементов расположенных на главной диагонали — Pascal(Паскаль)

Ввод оформить в виде процедуры, поиск среднего арифметического в виде функции.

uses crt;

const
  Max = 20;

type
  MemArrNM = array [1 .. Max, 1 .. Max] of ^integer;
  pMemArrNM = ^MemArrNM;

var
  a, b: pMemArrNM;
  Sr: real;

procedure FillArrayNxM(const First, N, M: integer; var p: pMemArrNM);
var
  i, j: integer;
  tmp: MemArrNM;
begin
  randomize;
  for i := First to N do
    for j := First to M do
    begin
      new(tmp[i, j]);
      tmp[i, j]^ := random(100) - 50;
    end;
  p := @tmp;
end;

function SrArMainDiag(const First, N, M: integer; p: pMemArrNM): real;
var
  i, j, Sum, Count: integer;
begin
  Count := 0;
  Sum := 0;
  for i := First to N do
    for j := First to M do
      if (i = j) and (p^[i, j]^ > 0) then
      begin
        Inc(Count);
        Sum := Sum + p^[i, j]^;
      end;
  SrArMainDiag := Sum / Count;
end;

procedure WriteAndFree(const First, N, M: integer; p: pMemArrNM);
var
  i, j: integer;
begin
  for i := First to N do
  begin
    for j := First to M do
    begin
      write(p^[i, j]^, '  ');
      Dispose(p^[i, j]);
    end;
    writeln;
  end;
end;

begin
  ClrScr;
  FillArrayNxM(1, 4, 4, a);
  Sr := SrArMainDiag(1, 4, 4, a);
  writeln('Matrica A 4x4: ');
  WriteAndFree(1, 4, 4, a);
  writeln('Srednearifm. polozhitelnyh elementov glavnoi diagonali: ', Sr:6:2);
  FillArrayNxM(1, 5, 5, b);
  Sr := SrArMainDiag(1, 5, 5, b);
  writeln;
  writeln('Matrica B 5x5: ');
  WriteAndFree(1, 5, 5, b);
  writeln('Srednearifm. polozhitelnyh elementov glavnoi diagonali: ', Sr:6:2);
  write('Press any key to EXIT...');
  readkey;

end.

Leave a Comment

75 + = 79