Алгоритмы
Рисунок 3.3
Лабораторная работа №7
Создание и использование модуля
Задание: Создать программу вычисления среднего арифметического положительных элементов массива произвольной размерности.Создать программу вычисления суммы элементов главной диагонали матрицы произвольной размерности.
Интерфейс программы
На изображении 4.1 показано окно программы на начальном этапе. На изоброжании 4.2 показано окно программы после формирования исходного массива и матрицы и выполнение функций.
Рисунок 4.1
Рисунок 4.2
Код программы
Исходный код модуля программы:
unit Matrix;
interface
uses SysUtils, Math;
Type Tmas1 = array of extended; // одномерный массив
Type Tmas2 = array of array of extended; // двумерный массив
function MidArray ( Masr : Tmas1) : extended; // среднее арифметическое положительных элементов массива
function DiagSum ( Mas2: Tmas2) : extended; // сумма элементов главной диагонали матрицы
procedure GenMatr1(NElem: byte; var Mas: Tmas1); // заполнение массива
procedure GenMatr2(CElem: byte;RElem: byte; var Mas2: Tmas2); // заполнение матрицы
implementation
//10 variant
procedure GenMatr1(NElem: byte; var Mas: Tmas1); // заполнение массива
var col: integer;
begin
randomize;
SetLength(mas,NElem);
for col:= 0 to nelem-1 do
begin
Mas[col]:=(Random(20)-Random(20));
end;
end;
function MidArray ( Masr : Tmas1) : extended; // среднее арифметическое положительных элементов массива
var mid,sym: extended;
col,n: integer;
begin
n:=0;
sym:=0;
for col:=0 to length(masr)-1 do
if masr[col]>0 then
begin
sym:= sym + masr[col];
n:=n+1;
end;
if sym=0 then mid:=0 else
mid:= sym/n;
midarray:= mid;
end;
//2 variant
procedure GenMatr2(CElem: byte;RElem: byte; var Mas2: Tmas2); // заполнение матрицы
var col, row: integer;
begin
randomize;
SetLength(mas2,RElem,CElem);
for col:= 0 to Celem-1 do
for row:= 0 to RElem-1 do
begin
Mas2[row,col]:=(Random(20)-Random(20));
end;
end;
function DiagSum ( Mas2: Tmas2) : extended; // Сумма элементов главной диагонали матрицы
var col, row: integer;
begin
result:=0;
if length(Mas2[0])>length(Mas2) then
for col := 0 to Length(mas2[0]) do
result:=result+mas2[col,col]
else
for row := 0 to Length(mas2)-1 do
result:=result+mas2[row,row];
DiagSum:=result;
end;
end.
Исходный код программы:
procedure TForm1.Button1Click(Sender: TObject);
var
col: integer;
begin
SG1.RowCount:=0;
SG1.ColCount:= SE1.Value;
GenMatr1(SE1.Value, mas);
for col := 0 to SE1.Value -1 do
SG1.Cells[col,0]:= FloatToStr(mas[col]);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption:= 'Среднее арифметическое положительных эл-тов массива: ' + FloatToStr(MidArray(Mas));
end;
procedure TForm1.Button3Click(Sender: TObject);
var
col, row: integer;
begin
SG2.RowCount:=SE2.Value;
SG2.ColCount:=SE3.Value;
GenMatr2(SE3.Value,SE2.Value, mas2);
for col := 0 to SE3.Value - 1 do
for row := 0 to SE2.Value - 1 do
SG2.Cells[col,row]:= FloatToStr(mas2[row,col]);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Label4.Caption:= 'Сумма элементов главной диагонали матрицы: ' + FloatToStr(DiagSum(mas2));
end;