Матрица , 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 и представляет собой описание структуры данных и реализацию операций над матрицами.