Матрица , 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 и представляет собой описание структуры данных и реализацию операций над матрицами.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д