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