Матрица , Object Pascal

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

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

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

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

textual
Листинг программы
unit Matrix;
interface
const
    MAXSIZE = 256;
    ANSWER: Array[Boolean] Of String = (' не ', ' ');
type
    TIterator = 0..MAXSIZE;
    TSize = 0..MAXSIZE - 1;
    TVector = Array[TSize] Of Integer;
    TArray = Array[TSize] Of TVector;
    TMatrix = Object
        ar: TArray;
        n, m: TIterator;
        isInit: Boolean;
        constructor Init(const newN, newM: TIterator);
        destructor CleanUp;
        procedure Print(const message: String);
        function IsDiagonal: Boolean;
        function IsDiagonalString: String;
        function IsIdentity: Boolean;
        function IsIdentityString: String;
        function IsZero: Boolean;
        function IsZeroString: String;
    end;
    procedure RandomMatrix(var ar: TArray; const n, m: TIterator);
    procedure ManualInputMatrix(var ar: TArray; const n, m: TIterator);
implementation
procedure RandomMatrix(var ar: TArray; const n, m: TIterator);
var
    i, j: TIterator;
begin
    for i := Low(TIterator) to n - 1 do
        for j := Low(TIterator) to m - 1 do
            ar[i, j] := Random(199) - 99;
end;
procedure ManualInputMatrix(var ar: TArray; const n, m: TIterator);
var
    i, j: TIterator;
begin
    for i := Low(TIterator) to n - 1 do
        for j := Low(TIterator) to m - 1 do
        begin
            Write('ar[', i, '][', j, ']=');
            ReadLn(ar[i, j]);
        end;
end;
constructor TMatrix.Init(const newN, newM: TIterator);
var
    c: 0..1;
begin
    isInit := (newN > 0) And (newM > 0);
    n := newN;
    m := newM;
    if (isInit)
    then
    begin
        Write('Выберите метод инициализации массива (0 - ручной | 1 - рандомный): ');
        ReadLn(c);
        if (c = 0)
        then
            ManualInputMatrix(ar, n, m)
        else
            RandomMatrix(ar, n, m);
    end;
end;
destructor TMatrix.CleanUp;
begin
    n := 0;
    m := 0;
    isInit := False;
end;
procedure TMatrix.Print(const message: String);
var
    i, j: TIterator;
begin
    if (isInit)
    then
    begin
        if (Length(message) > 0)
        then
            WriteLn(message);
        for i := Low(TIterator) to n - 1 do
        begin
            for j := Low(TIterator) to m - 1 do
                Write(ar[i, j]:7);
            WriteLn;
        end;
    end
    else
        WriteLn('Матрица не инициализирована!');
end;
function TMatrix.IsDiagonal: Boolean;
var
    Result: Boolean;
    i, j: TIterator;
begin
    Result := (n = m);
    i := Low(TIterator);
    while ((i < n) And (Result)) do
    begin
        j := Low(TIterator);
        while ((j < m) And (Result)) do
        begin
            if (i <> j)
            then
                Result := (ar[i, j] = 0);
            Inc(j);
        end;
        Inc(i);
    end;
    IsDiagonal := Result;
end;
function TMatrix.IsDiagonalString: String;
var
    Result: String;
begin
    if (isInit)
    then
        Result := 'Матрица' + ANSWER[IsDiagonal] + 'является диагональной.'
    else
        Result := 'Матрица не инициализирована!';
    IsDiagonalString := Result;
end;
function TMatrix.IsIdentity: Boolean;
var
    Result: Boolean;
    i, j: TIterator;
begin
    Result := (n = m);
    i := Low(TIterator);
    while ((i < n) And (Result)) do
    begin
        j := Low(TIterator);
        while ((j < m) And (Result)) do
        begin
            Result := (ar[i, j] = Ord(i = j));
            Inc(j);
        end;
        Inc(i);
    end;
    IsIdentity := Result;
end;
function TMatrix.IsIdentityString: String;
var
    Result: String;
begin
    if (isInit)
    then
        Result := 'Матрица' + ANSWER[IsIdentity] + 'является единичной.'
    else
        Result := 'Матрица не инициализирована!';
    IsIdentityString := Result;
end;
function TMatrix.IsZero: Boolean;
var
    Result: Boolean;
    i, j: TIterator;
begin
    i := Low(TIterator);
    repeat
        j := Low(TIterator);
        repeat
            Result := (ar[i, j] = 0);
            Inc(j);
        until ((j >= m) Or (Not Result));
        Inc(i);
    until ((i >= n) Or (Not Result));
    IsZero := Result;
end;
function TMatrix.IsZeroString: String;
var
    Result: String;
begin
    if (isInit)
    then
        Result := 'Матрица' + ANSWER[IsZero] + 'является нулевой.'
    else
        Result := 'Матрица не инициализирована!';
    IsZeroString := Result;
end;
begin
    Randomize;
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