Описать класс: квадратная матрица, элементы которой задаются динамически - Free Pascal
Формулировка задачи:
описать класс: квадратная матрица, элементы которой задаются динамически (динамические массивы).
Описать все необходимые конструкторы:
1) без параметров, который создает матрицу произвольного размера, заполняет ее нулями.
2) с параметрами, задают номер матрицы и элемент заполнения.
3) метод ввода / вывода + метод, который задает размерность матрицы.
4) метод сложения двух матриц, умножение и сортировки каждого отдельного строки.
Продемонстрировать работу всех методов, метод сложения и умножения должно возвращать тип "матрица".
Решение задачи: «Описать класс: квадратная матрица, элементы которой задаются динамически»
textual
Листинг программы
{$mode objfpc}
uses sysutils;
type
TMatrix = class
public
Items:array of array of Integer;
constructor Create(m_size:Integer; isTemporary : boolean = false);
constructor Create(m_size,value:Integer);
procedure Print;
procedure Read;
function FillRandom : TMatrix;
function get_size:Integer;
procedure resize(new_size:Integer);
class procedure Purge;
private
type
TMatrixArray = array of TMatrix;
var
lst : TMatrixArray; static;
size:Integer;
end;
class procedure TMatrix.Purge;
var mx : TMatrix;
begin
for mx in lst do
begin
if assigned(mx) then
freeandnil(mx);
end;
SetLength(lst, 0);
end;
constructor TMatrix.Create(m_size:Integer; isTemporary : boolean = false);
var i,j:Integer;
begin
inherited Create;
size:=m_size;
SetLength(Items,size,size);
for i:=0 to size-1 do
for j:=0 to size-1 do Items[i][j]:=0;
if isTemporary then
begin
SetLength(lst, Length(lst) + 1);
lst[length(lst) - 1] := self;
end;
end;
constructor TMatrix.Create(m_size,value:Integer);
var i,j:Integer;
begin
inherited Create;
size:=m_size;
SetLength(Items,size,size);
for i:=0 to size-1 do
for j:=0 to size-1 do Items[i][j]:=value;
end;
procedure TMatrix.Print;
var i,j:Integer;
begin
for i:=0 to size-1 do
begin
for j:=0 to size-1 do Write(Items[i][j]:4);
Writeln;
end;
end;
procedure TMatrix.Read;
var i,j:Integer;
begin
Writeln('Введите элементы матрицы:');
for i:=0 to size-1 do
for j:=0 to size-1 do
begin
Write('Элемент[',i,',',j,']=');
Readln(Items[i,j]);
end;
end;
function TMatrix.get_size:Integer;
begin
Result:=size;
end;
procedure TMatrix.resize(new_size:Integer);
begin
SetLength(Items,new_size,new_size);
end;
operator +(const a,b:TMatrix):TMatrix;
var i,j,n:Integer;
begin
if a.get_size<>b.get_size then Exit;
n:=a.get_size;
Result:=TMatrix.Create(n, true);
for i:=0 to n-1 do
for j:=0 to n-1 do
Result.Items[i,j]:=a.Items[i,j]+b.Items[i,j];
end;
// procedure TMatrix.FillRandom;
function TMatrix.FillRandom : TMatrix;
var i,j:Integer;
begin
for i:=0 to size-1 do
for j:=0 to size-1 do
Items[i,j]:=Random(51)-25;
result := self;
end;
var a,b,c,d:TMatrix;
begin
Randomize;
a:=TMatrix.Create(4).FillRandom;
b:=TMatrix.Create(4).FillRandom;
c:=TMatrix.Create(4).FillRandom;
Writeln('A:'); a.Print;
Writeln('B:'); b.Print;
writeln('C:'); c.Print;
d:=a+b+c;
Writeln('D=A+B+C:'); d.Print;
freeandnil(a);
freeandnil(b);
freeandnil(c);
TMatrix.Purge;
Readln;
end.
Объяснение кода листинга программы
- Объявление класса TMatrix, который представляет квадратную матрицу.
- Создание статического массива TMatrixArray для хранения объектов класса TMatrix.
- Реализация метода Purge для освобождения памяти, занятой объектами класса TMatrix.
- Реализация конструктора Create для создания объекта класса TMatrix.
- Реализация конструктора Create для создания объекта класса TMatrix с заданным размером и начальным значением.
- Реализация метода Print для вывода содержимого матрицы на экран.
- Реализация метода Read для чтения элементов матрицы с клавиатуры.
- Реализация функции get_size для получения размера матрицы.
- Реализация процедуры resize для изменения размера матрицы.
- Реализация оператора + для сложения двух объектов класса TMatrix.
- Реализация функции FillRandom для заполнения матрицы случайными числами.
- Создание четырех объектов класса TMatrix (a, b, c, d) и заполнение их случайными числами.
- Вывод содержимого матриц a, b, c на экран.
- Создание объекта d путем сложения a, b и c.
- Вывод содержимого матрицы d на экран.
- Освобождение памяти, занятой объектами a, b и c.
- Освобождение памяти, занятой объектами класса TMatrix, с помощью метода Purge.
- Чтение действия из консоли.
- Ввод и вывод производятся с помощью функций Writeln и Readln из модуля SysUtils.
- Программа завершается после чтения действия из консоли.