Описать класс: квадратная матрица, элементы которой задаются динамически - 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.
- Программа завершается после чтения действия из консоли.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д