Матрица , 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.
Объяснение кода листинга программы
- Объявляются глобальные константы и типы данных:
MAXSIZE
- константа, равная 256,ANSWER
- массив строк, содержащий значенияне
и
- Описывается объект
TMatrix
с полями:ar
- двумерный массив для хранения элементов матрицы,n
,m
- размеры матрицы,isInit
- булевая переменная для отслеживания инициализации матрицы.- объявляются методы:
Init
- конструктор, инициализирующий матрицу и ее элементы,Cleanup
- деструктор, обнуляющий размеры и помечающий матрицу как не инициализированную,Print
- метод для вывода матрицы,IsDiagonal
- метод для определения, является ли матрица диагональной,IsDiagonalString
- метод для возвращения строки с описанием диагональности матрицы,IsIdentity
- метод для определения, является ли матрица единичной,IsIdentityString
- метод для возвращения строки с описанием единичности матрицы,IsZero
- метод для определения, является ли матрица нулевой,IsZeroString
- метод для возвращения строки с описанием нулевости матрицы.
- Описываются процедуры:
RandomMatrix
- заполнения матрицы случайными числами,ManualInputMatrix
- ручного ввода элементов матрицы.
- Реализуется инициализация генератора случайных чисел в блоке
begin...end
. Код написан на Object Pascal и представляет собой описание структуры данных и реализацию операций над матрицами.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д