type M = array[,] of integer; // двумерный динамический V = array[1..2] of integer; // одномерный статическийfunction nPos(pm: M): integer;var i, j, p: integer;begin p := 0; for i := 0 to Length(pm, 0) - 1 do for j := 0 to Length(pm, 1) - 1 do if pm[i, j] > 0 then p := p + 1; nPos := pend;function nNeg(pm: M): integer;var i, j, p: integer;begin p := 0; for i := 0 to Length(pm, 0) - 1 do for j := 0 to Length(pm, 1) - 1 do if pm[i, j] < 0 then p := p + 1; nNeg := pend;procedure GetV(A: M; var C: V);begin C[1] := nPos(A); C[2] := nNeg(A)end;procedure InitM(var A: M);var i, j: integer;begin for i := 0 to Length(A, 0) - 1 do for j := 0 to Length(A, 1) - 1 do A[i, j] := random(100) - 50end;procedure PrintM(A: M);var i, j: integer;begin for i := 0 to Length(A, 0) - 1 do begin for j := 0 to Length(A, 1) - 1 do write(A[i, j]:4); writeln endend;var A1, A2, A3: M; B1, B2, B3: V; n1, m1, n2, m2, n3, m3: integer;begin Randomize; writeln('Введите число строк и столбцов массива'); readln(n1, m1); SetLength(A1, n1, m1); InitM(A1); Writeln('массив А1'); PrintM(A1); GetV(A1, B1); writeln('Количество положительных ', B1[1], ', количество отрицательных ', B1[2]); writeln('Введите число строк и столбцов массива'); readln(n2, m2); SetLength(A2, n2, m2); InitM(A2); Writeln('массив А2'); PrintM(A2); GetV(A2, B2); writeln('Количество положительных ', B2[1], ', количество отрицательных ', B2[2]); writeln('Введите число строк и столбцов массива'); readln(n3, m3); SetLength(A3, n3, m3); InitM(A3); Writeln('массив А3'); PrintM(A3); GetV(A3, B3); writeln('Количество положительных ', B3[1], ', количество отрицательных ', B3[2]);end.Тестовый прогон:Введите число строк и столбцов массива3 3массив А1 6 11 -46 24 -41 36 44 9 18Количество положительных 7, количество отрицательных 2Введите число строк и столбцов массива2 4массив А2 37 -4 -2 43 -18 36 0 44Количество положительных 4, количество отрицательных 3Введите число строк и столбцов массива5 2массив А3 5 -15 49 -1 -40 35 -33 -9 -22 -31Количество положительных 3, количество отрицательных 7