![](/user_photo/2706_HbeT2.jpg)
Задача 2.5.3.
Условие
Разработать алгоритм и программу нисходящим способом, предполагая заданной матрицу А 5 на 5 или одномерные массивы указанной длины.
Найти среднее арифметическое элементов матрицы A, и, если матрица A не содержит ни одного отрицательного элемента, изменить элементы матрицы путем вычитания из них среднего арифметического.
Листинг
program project1;
uses
things;
function CreateMatrix(rows, columns: integer): TMatrix;
var
i, k: integer;
M: TMatrix;
begin
SetLength(M, rows);
for i:=Low(M) to High(M) do
begin
SetLength(M[i], columns);
for k:=Low(M[i]) to High(M[i]) do
M[i][k] := Random(100);
end;
Result := M;
end;
function GetAverageValue(Matrix: TMatrix): integer; //Функция для нахожения срежнего арифметического
var
i, k, n, summ: integer;
begin
n := 0;
summ := 0;
for i:=Low(Matrix) to High(Matrix) do
for k:=Low(Matrix[i]) to High(Matrix[i]) do
begin
summ += Matrix[i][k];
Inc(n);
end;
Result := summ div n;
end;
function HasNegativeElements(Matrix: TMatrix): boolean; //Проверяет матрицу на наличие отрицательных элементов
var
i, k: integer;
begin
for i:=Low(Matrix) to High(Matrix) do
for k:=Low(Matrix[i]) to High(Matrix[i]) do
if Matrix[i][k] < 0 then
begin
Result := True;
Exit;
end;
Result := False;
end;
operator - (const a: TMatrix; const b: integer): TMatrix; overload;//Перегружаем оператор вычитания
var
i, k: integer;
M: TMatrix;
begin
M := a;
for i:=Low(a) to High(a) do
for k:=Low(a) to High(a) do
M[i][k] -= b;
Result := a;
end;
var
Matrix: TMatrix;
Avg: integer;
begin
randomize;
Matrix := CreateMatrix(5, 5);
writeln('Исходная матрица:');
PrintMatrix(Matrix);
Avg := GetAverageValue(Matrix);
writeln('Среднее арифметическое элементов матрицы: ', Avg);
if nowriteln('Матрица после вычитания среднего арифметического их всех её элементов:');
PrintMatrix(Matrix);
end
else
writeln('Матрица содержит отрицательные элементы.');
readln();
end.t HasNegativeElements(Matrix) then
begin
writeln('Матрица не содержит отрицательных элементов.');
Matrix := Matrix - Avg;
writeln('Матрица после вычитания среднего арифметического их всех её элементов:');
PrintMatrix(Matrix);
end
else
writeln('Матрица содержит отрицательные элементы.');
Результаты работы программы
Переменные
Класс |
Имя |
Тип |
Структура |
Назначение |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Блок-схема
Задача 4.3.3.
Условие
Разработать программу, выделив процедуры.
Листинг
program project1;
uses
things;
procedure FillMatrix(out M: TMatrix);
var
i, k: integer;
begin
SetLength(M, 15);
for i:=Low(M) to High(M) do
begin
SetLength(M[i], 15);
end;
for i:=Low(M) to High(M) do
begin
k:=0;
while k <= i do
begin
M[i, k] := Random(100);
M[k, i] := M[i, k];
Inc(k);
end;
end;
end;
function HasSymmetry(const M: TMatrix): boolean;
var
i, k: integer;
begin
for i:=Low(M) to High(M) do
begin
k := 0;
while k < i do
begin
if M[i, k] <> M[k, i] then
begin
writeln('Матрица не симметрична относительно главной диагонали.');
Result := False;
exit; //Покидаем функцию
end;
Inc(k);
end;
end;
writeln('Матрица симметрична относительно главной диагонали.');
Result := true;
end;
procedure ZeroUpperElements(M: TMatrix);
var
i, k: integer;
begin
for i:=Low(M) to High(M) do
begin
k := High(M[i]);
while k > i do
begin
M[i, k] := 0;
Dec(k);
end;
end;
end;
function SummLowerElements(const M:TMatrix): integer;
var
i, k, Summ: integer;
begin
Summ := 0;
for i:=Low(M) to High(M) do
begin
k := Low(M[i]);
while k < i do
begin
Summ += M[i, k];
Inc(k);
end;
end;
Result := Summ;
end;
var
Matr: TMatrix;
begin
FillMatrix(Matr);
writeln('Исходная матрица:');
PrintMatrix(Matr);
if HasSymmetry(Matr) then
begin
ZeroUpperElements(Matr);
writeln('Матрица после обнуления элементов, лежащих выше диагонали:');
PrintMatrix(Matr);
writeln('Сумма элементов, лежащих ниже диагонали: ', SummLowerElements(Matr));
end;
readln();
end.
Результаты работы программы
Переменные
Класс |
Имя |
Тип |
Структура |
Назначение |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Блок-схема