Матрица , Object Pascal

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

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

Класс Матрица. Члены класса: Размерность матрицы, элементы матрицы. Методы: Конструктор , деструктор, метод вывода матрицы, проверка , является ли матрица диагональной , нулевой, единичной. ________ Нужна помощь.

Решение задачи: «Матрица , Object Pascal»

textual
Листинг программы
  1. unit Matrix;
  2. interface
  3. const
  4.     MAXSIZE = 256;
  5.     ANSWER: Array[Boolean] Of String = (' не ', ' ');
  6. type
  7.     TIterator = 0..MAXSIZE;
  8.     TSize = 0..MAXSIZE - 1;
  9.     TVector = Array[TSize] Of Integer;
  10.     TArray = Array[TSize] Of TVector;
  11.     TMatrix = Object
  12.         ar: TArray;
  13.         n, m: TIterator;
  14.         isInit: Boolean;
  15.         constructor Init(const newN, newM: TIterator);
  16.         destructor CleanUp;
  17.         procedure Print(const message: String);
  18.         function IsDiagonal: Boolean;
  19.         function IsDiagonalString: String;
  20.         function IsIdentity: Boolean;
  21.         function IsIdentityString: String;
  22.         function IsZero: Boolean;
  23.         function IsZeroString: String;
  24.     end;
  25.     procedure RandomMatrix(var ar: TArray; const n, m: TIterator);
  26.     procedure ManualInputMatrix(var ar: TArray; const n, m: TIterator);
  27. implementation
  28. procedure RandomMatrix(var ar: TArray; const n, m: TIterator);
  29. var
  30.     i, j: TIterator;
  31. begin
  32.     for i := Low(TIterator) to n - 1 do
  33.         for j := Low(TIterator) to m - 1 do
  34.             ar[i, j] := Random(199) - 99;
  35. end;
  36. procedure ManualInputMatrix(var ar: TArray; const n, m: TIterator);
  37. var
  38.     i, j: TIterator;
  39. begin
  40.     for i := Low(TIterator) to n - 1 do
  41.         for j := Low(TIterator) to m - 1 do
  42.         begin
  43.             Write('ar[', i, '][', j, ']=');
  44.             ReadLn(ar[i, j]);
  45.         end;
  46. end;
  47. constructor TMatrix.Init(const newN, newM: TIterator);
  48. var
  49.     c: 0..1;
  50. begin
  51.     isInit := (newN > 0) And (newM > 0);
  52.     n := newN;
  53.     m := newM;
  54.     if (isInit)
  55.     then
  56.     begin
  57.         Write('Выберите метод инициализации массива (0 - ручной | 1 - рандомный): ');
  58.         ReadLn(c);
  59.         if (c = 0)
  60.         then
  61.             ManualInputMatrix(ar, n, m)
  62.         else
  63.             RandomMatrix(ar, n, m);
  64.     end;
  65. end;
  66. destructor TMatrix.CleanUp;
  67. begin
  68.     n := 0;
  69.     m := 0;
  70.     isInit := False;
  71. end;
  72. procedure TMatrix.Print(const message: String);
  73. var
  74.     i, j: TIterator;
  75. begin
  76.     if (isInit)
  77.     then
  78.     begin
  79.         if (Length(message) > 0)
  80.         then
  81.             WriteLn(message);
  82.         for i := Low(TIterator) to n - 1 do
  83.         begin
  84.             for j := Low(TIterator) to m - 1 do
  85.                 Write(ar[i, j]:7);
  86.             WriteLn;
  87.         end;
  88.     end
  89.     else
  90.         WriteLn('Матрица не инициализирована!');
  91. end;
  92. function TMatrix.IsDiagonal: Boolean;
  93. var
  94.     Result: Boolean;
  95.     i, j: TIterator;
  96. begin
  97.     Result := (n = m);
  98.     i := Low(TIterator);
  99.     while ((i < n) And (Result)) do
  100.     begin
  101.         j := Low(TIterator);
  102.         while ((j < m) And (Result)) do
  103.         begin
  104.             if (i <> j)
  105.             then
  106.                 Result := (ar[i, j] = 0);
  107.             Inc(j);
  108.         end;
  109.         Inc(i);
  110.     end;
  111.     IsDiagonal := Result;
  112. end;
  113. function TMatrix.IsDiagonalString: String;
  114. var
  115.     Result: String;
  116. begin
  117.     if (isInit)
  118.     then
  119.         Result := 'Матрица' + ANSWER[IsDiagonal] + 'является диагональной.'
  120.     else
  121.         Result := 'Матрица не инициализирована!';
  122.     IsDiagonalString := Result;
  123. end;
  124. function TMatrix.IsIdentity: Boolean;
  125. var
  126.     Result: Boolean;
  127.     i, j: TIterator;
  128. begin
  129.     Result := (n = m);
  130.     i := Low(TIterator);
  131.     while ((i < n) And (Result)) do
  132.     begin
  133.         j := Low(TIterator);
  134.         while ((j < m) And (Result)) do
  135.         begin
  136.             Result := (ar[i, j] = Ord(i = j));
  137.             Inc(j);
  138.         end;
  139.         Inc(i);
  140.     end;
  141.     IsIdentity := Result;
  142. end;
  143. function TMatrix.IsIdentityString: String;
  144. var
  145.     Result: String;
  146. begin
  147.     if (isInit)
  148.     then
  149.         Result := 'Матрица' + ANSWER[IsIdentity] + 'является единичной.'
  150.     else
  151.         Result := 'Матрица не инициализирована!';
  152.     IsIdentityString := Result;
  153. end;
  154. function TMatrix.IsZero: Boolean;
  155. var
  156.     Result: Boolean;
  157.     i, j: TIterator;
  158. begin
  159.     i := Low(TIterator);
  160.     repeat
  161.         j := Low(TIterator);
  162.         repeat
  163.             Result := (ar[i, j] = 0);
  164.             Inc(j);
  165.         until ((j >= m) Or (Not Result));
  166.         Inc(i);
  167.     until ((i >= n) Or (Not Result));
  168.     IsZero := Result;
  169. end;
  170. function TMatrix.IsZeroString: String;
  171. var
  172.     Result: String;
  173. begin
  174.     if (isInit)
  175.     then
  176.         Result := 'Матрица' + ANSWER[IsZero] + 'является нулевой.'
  177.     else
  178.         Result := 'Матрица не инициализирована!';
  179.     IsZeroString := Result;
  180. end;
  181. begin
  182.     Randomize;
  183. end.

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

  1. Объявляются глобальные константы и типы данных:
    • MAXSIZE - константа, равная 256,
    • ANSWER - массив строк, содержащий значения не и в зависимости от булевого значения.
  2. Описывается объект TMatrix с полями:
    • ar - двумерный массив для хранения элементов матрицы,
    • n, m - размеры матрицы,
    • isInit - булевая переменная для отслеживания инициализации матрицы.
    • объявляются методы:
      • Init - конструктор, инициализирующий матрицу и ее элементы,
      • Cleanup - деструктор, обнуляющий размеры и помечающий матрицу как не инициализированную,
      • Print - метод для вывода матрицы,
      • IsDiagonal - метод для определения, является ли матрица диагональной,
      • IsDiagonalString - метод для возвращения строки с описанием диагональности матрицы,
      • IsIdentity - метод для определения, является ли матрица единичной,
      • IsIdentityString - метод для возвращения строки с описанием единичности матрицы,
      • IsZero - метод для определения, является ли матрица нулевой,
      • IsZeroString - метод для возвращения строки с описанием нулевости матрицы.
  3. Описываются процедуры:
    • RandomMatrix - заполнения матрицы случайными числами,
    • ManualInputMatrix - ручного ввода элементов матрицы.
  4. Реализуется инициализация генератора случайных чисел в блоке begin...end. Код написан на Object Pascal и представляет собой описание структуры данных и реализацию операций над матрицами.

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


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

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

12   голосов , оценка 4.5 из 5

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

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

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