Описать класс: квадратная матрица, элементы которой задаются динамически - Free Pascal

Узнай цену своей работы

Формулировка задачи:

описать класс: квадратная матрица, элементы которой задаются динамически (динамические массивы). Описать все необходимые конструкторы: 1) без параметров, который создает матрицу произвольного размера, заполняет ее нулями. 2) с параметрами, задают номер матрицы и элемент заполнения. 3) метод ввода / вывода + метод, который задает размерность матрицы. 4) метод сложения двух матриц, умножение и сортировки каждого отдельного строки. Продемонстрировать работу всех методов, метод сложения и умножения должно возвращать тип "матрица".

Решение задачи: «Описать класс: квадратная матрица, элементы которой задаются динамически»

textual
Листинг программы
  1. {$mode objfpc}
  2. uses sysutils;
  3.  
  4. type
  5.   TMatrix = class
  6.   public
  7.     Items:array of array of Integer;
  8.     constructor Create(m_size:Integer; isTemporary : boolean = false);
  9.     constructor Create(m_size,value:Integer);
  10.     procedure Print;
  11.     procedure Read;
  12.     function FillRandom : TMatrix;
  13.     function get_size:Integer;
  14.     procedure resize(new_size:Integer);
  15.  
  16.     class procedure Purge;
  17.   private
  18.   type
  19.     TMatrixArray = array of TMatrix;
  20.   var
  21.     lst : TMatrixArray; static;
  22.     size:Integer;
  23.   end;
  24.  
  25. class procedure TMatrix.Purge;
  26. var mx : TMatrix;
  27. begin
  28.   for mx in lst do
  29.   begin
  30.     if assigned(mx) then
  31.       freeandnil(mx);
  32.   end;
  33.   SetLength(lst, 0);
  34. end;
  35.  
  36. constructor TMatrix.Create(m_size:Integer; isTemporary : boolean = false);
  37. var i,j:Integer;
  38. begin
  39.   inherited Create;
  40.   size:=m_size;
  41.   SetLength(Items,size,size);
  42.   for i:=0 to size-1 do
  43.     for j:=0 to size-1 do Items[i][j]:=0;
  44.  
  45.   if isTemporary then
  46.   begin
  47.     SetLength(lst, Length(lst) + 1);
  48.     lst[length(lst) - 1] := self;
  49.   end;
  50. end;
  51.  
  52. constructor TMatrix.Create(m_size,value:Integer);
  53. var i,j:Integer;
  54. begin
  55.   inherited Create;
  56.   size:=m_size;
  57.   SetLength(Items,size,size);
  58.   for i:=0 to size-1 do
  59.     for j:=0 to size-1 do Items[i][j]:=value;
  60. end;
  61.  
  62. procedure TMatrix.Print;
  63. var i,j:Integer;
  64. begin
  65.   for i:=0 to size-1 do
  66.   begin
  67.     for j:=0 to size-1 do Write(Items[i][j]:4);
  68.     Writeln;
  69.   end;
  70. end;
  71.  
  72. procedure TMatrix.Read;
  73. var i,j:Integer;
  74. begin  
  75.   Writeln('Введите элементы матрицы:');
  76.   for i:=0 to size-1 do
  77.     for j:=0 to size-1 do
  78.     begin
  79.       Write('Элемент[',i,',',j,']=');
  80.       Readln(Items[i,j]);
  81.     end;
  82. end;
  83.  
  84. function TMatrix.get_size:Integer;
  85. begin
  86.   Result:=size;
  87. end;
  88.  
  89. procedure TMatrix.resize(new_size:Integer);
  90. begin
  91.   SetLength(Items,new_size,new_size);
  92. end;
  93.  
  94. operator +(const a,b:TMatrix):TMatrix;
  95. var i,j,n:Integer;
  96. begin
  97.   if a.get_size<>b.get_size then Exit;
  98.   n:=a.get_size;
  99.   Result:=TMatrix.Create(n, true);
  100.   for i:=0 to n-1 do
  101.     for j:=0 to n-1 do
  102.       Result.Items[i,j]:=a.Items[i,j]+b.Items[i,j];
  103. end;
  104.  
  105. // procedure TMatrix.FillRandom;
  106. function TMatrix.FillRandom : TMatrix;
  107. var i,j:Integer;
  108. begin
  109.   for i:=0 to size-1 do
  110.     for j:=0 to size-1 do
  111.       Items[i,j]:=Random(51)-25;
  112.   result := self;
  113. end;
  114.  
  115. var a,b,c,d:TMatrix;
  116. begin
  117.   Randomize;
  118.   a:=TMatrix.Create(4).FillRandom;
  119.   b:=TMatrix.Create(4).FillRandom;
  120.   c:=TMatrix.Create(4).FillRandom;
  121.   Writeln('A:'); a.Print;
  122.   Writeln('B:'); b.Print;
  123.   writeln('C:'); c.Print;
  124.  
  125.   d:=a+b+c;
  126.  
  127.   Writeln('D=A+B+C:'); d.Print;
  128.   freeandnil(a);
  129.   freeandnil(b);
  130.   freeandnil(c);
  131.  
  132.   TMatrix.Purge;
  133.   Readln;
  134. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы