﻿unit MatrixModule;

interface

const
  SzM = 10;
  SzN = 10;

type
  intMatrix = array [1..SzM, 1..SzN] of integer;
  realMatrix = array [1..SzM, 1..SzN] of real;

procedure FillMatrixByRandom(var a: intMatrix; m, n: integer);
procedure FillMatrixByRandom(var a: intMatrix; m, n, k, l: integer);
procedure FillMatrixByElement(var a: intMatrix; m, n: integer);
procedure FillMatrixByRandom(var a: realMatrix; m, n: integer);
procedure PrintMatrix(const a: intMatrix; m, n: integer);
procedure PrintMatrix(const a: realMatrix; m, n: integer);
procedure PrintRow(const a: intMatrix; m, n, i: integer);
procedure PrintCol(const a: intMatrix; m, n, j: integer);
function MaxInCol(var a: intMatrix; m, n, j: integer): integer;
function SumInCol(var a: intMatrix; m, n, j: integer): integer;

implementation

procedure FillMatrixByRandom(var a: intMatrix; m, n: integer);
var
  i, j: integer;
begin
  for i := 1 to M do
    for j := 1 to N do
      a[i, j] := Random(10);
end;

procedure FillMatrixByRandom(var a: intMatrix; m, n, k, l: integer);
var
  i, j: integer;
begin
  if k <= l then
    for i := 1 to M do
      for j := 1 to N do
        a[i, j] := Random(l - k + 1) + k//от k до l включительно, k<=l
  else
    for i := 1 to M do
      for j := 1 to N do
        a[i, j] := (-1) * Random(abs(l - k - 1)) + k;
end;

procedure FillMatrixByElement(var a: intMatrix; m, n: integer);
var
  i, j: integer;
begin
  for i := 1 to m do
    for j := 1 to n do
    begin
      Write('a[', i, ',', j, ']: ');
      Readln(a[i, j]);
    end;
end;

procedure FillMatrixByRandom(var a: realMatrix; m, n: integer);
var
  i, j: integer;
begin
  for i := 1 to M do
    for j := 1 to N do
      a[i, j] := Random * 10;
end;

function MaxInCol(var a: intMatrix; m, n, j: integer): integer;
var
  i, Max: integer;
begin
  Max := a[1, j];
  for i := 2 to m do
    if a[i, j] > Max then Max := a[i, j];
  MaxInCol := Max;
end;

function SumInCol(var a: intMatrix; m, n, j: integer): integer;
var
  i, Sum: integer;
begin
  Sum := 0;
  for i := 1 to m do
    Sum := Sum + a[i, j];
  SumInCol := Sum;
end;

procedure PrintMatrix(const a: intMatrix; m, n: integer);
var
  i, j: integer;
begin
  for i := 1 to M do
  begin
    for j := 1 to N do
      Write(a[i, j]: 4);
    Writeln;
  end;
end;

procedure PrintMatrix(const a: realMatrix; m, n: integer);
var
  i, j: integer;
begin
  for i := 1 to M do
  begin
    for j := 1 to N do
      Write(a[i, j]: 6: 2);
    Writeln;
  end;
end;

procedure PrintRow(const a: intMatrix; m, n, i: integer);
var
  j: integer;
begin
  for j := 1 to N do
    if j <> N then
      Write(a[i, j], ' ')
    else Write(a[i, j]);
  Writeln;
end;

procedure PrintCol(const a: intMatrix; m, n, j: integer);
var
  i: integer;
begin
  for i := 1 to m do
    if i <> m then
      Write(a[i, j], ' ')
    else Write(a[i, j]);
  Writeln;
end;

end.