Описать класс: квадратная матрица, элементы которой задаются динамически - 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.

Объяснение кода листинга программы

  1. Объявление класса TMatrix, который представляет квадратную матрицу.
  2. Создание статического массива TMatrixArray для хранения объектов класса TMatrix.
  3. Реализация метода Purge для освобождения памяти, занятой объектами класса TMatrix.
  4. Реализация конструктора Create для создания объекта класса TMatrix.
  5. Реализация конструктора Create для создания объекта класса TMatrix с заданным размером и начальным значением.
  6. Реализация метода Print для вывода содержимого матрицы на экран.
  7. Реализация метода Read для чтения элементов матрицы с клавиатуры.
  8. Реализация функции get_size для получения размера матрицы.
  9. Реализация процедуры resize для изменения размера матрицы.
  10. Реализация оператора + для сложения двух объектов класса TMatrix.
  11. Реализация функции FillRandom для заполнения матрицы случайными числами.
  12. Создание четырех объектов класса TMatrix (a, b, c, d) и заполнение их случайными числами.
  13. Вывод содержимого матриц a, b, c на экран.
  14. Создание объекта d путем сложения a, b и c.
  15. Вывод содержимого матрицы d на экран.
  16. Освобождение памяти, занятой объектами a, b и c.
  17. Освобождение памяти, занятой объектами класса TMatrix, с помощью метода Purge.
  18. Чтение действия из консоли.
  19. Ввод и вывод производятся с помощью функций Writeln и Readln из модуля SysUtils.
  20. Программа завершается после чтения действия из консоли.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы