Ввод оформить в виде процедуры, поиск среднего арифметического в виде функции.
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.