Советы по Delphi. Версия 1.0.6
Шрифт:
Раздел 3
Вот способ создания одно– и двухмерных динамических массивов:
(*
– -
–- модуль для создания двух очень простых классов обработки динамических массивов
– - TDynaArray : одномерный массив
– - TDynaMatrix : двумерный динамический массив
– -
*)
unit DynArray;
INTERFACE
uses SysUtils;
Type TDynArrayBaseType = double;
Const vMaxElements = (High(Cardinal) – $f) div sizeof(TDynArrayBaseType);
{=
гарантирует максимально возможный массив =}
Type
TDynArrayNDX = 1..vMaxElements;
TArrayElements = array[TDynArrayNDX] of TDynArrayBaseType;
{= самый большой массив TDynArrayBaseType, который мы может объявить =}
PArrayElements = ^TArrayElements;
{= указатель на массив =}
EDynArrayRangeError = CLASS(ERangeError);
TDynArray = CLASS
Private
fDimension: TDynArrayNDX;
fMemAllocated: word;
Function GetElement(N: TDynArrayNDX): TDynArrayBaseType;
Procedure SetElement(N: TDynArrayNDX; const NewValue: TDynArrayBaseType);
Protected
Elements : PArrayElements;
Public
Constructor Create(NumElements : TDynArrayNDX);
Destructor Destroy; override;
Procedure Resize(NewDimension : TDynArrayNDX); virtual;
Property dimension: TDynArrayNDX read fDimension;
Property Element[N : TDynArrayNDX] : TDynArrayBaseType read GetElement write SetElement; default;
END;
Const
vMaxMatrixColumns = 65520 div sizeof(TDynArray);
{= построение матрицы класса с использованием массива объектов TDynArray =}
Type
TMatrixNDX = 1..vMaxMatrixColumns;
TMatrixElements = array[TMatrixNDX] of TDynArray;
{= каждая колонка матрицы будет динамическим массивом =}
PMatrixElements = ^TMatrixElements;
{= указатель на массив указателей… =}
TDynaMatrix = CLASS
Private
fRows : TDynArrayNDX;
fColumns : TMatrixNDX;
fMemAllocated : longint;
Function GetElement(row: TDynArrayNDX; column: TMatrixNDX): TDynArrayBaseType;
Procedure SetElement(row: TDynArrayNDX; column: TMatrixNDX; const NewValue: TDynArrayBaseType);
Protected
mtxElements: PMatrixElements;
Public
Constructor Create(NumRows : TDynArrayNDX; NumColumns : TMatrixNDX);
Destructor Destroy; override;
Property rows: TDynArrayNDX read fRows;
Property columns: TMatrixNDX read fColumns;
Property Element[row : TDynArrayNDX; column : TMatrixNDX] : TDynArrayBaseType read GetElement write SetElement; default;
END;
IMPLEMENTATION
(*
--
--
методы TDynArray
--
*)
Constructor TDynArray.Create(NumElements : TDynArrayNDX);
BEGIN {==TDynArray.Create==}
inherited Create;
fDimension:= NumElements;
GetMem(Elements, fDimension*sizeof(TDynArrayBaseType));
fMemAllocated:= fDimension*sizeof(TDynArrayBaseType);
FillChar(Elements^, fMemAllocated, 0);
END; {==TDynArray.Create==}
Destructor TDynArray.Destroy;
BEGIN {==TDynArray.Destroy==}
FreeMem(Elements, fMemAllocated);
inherited Destroy;
END; {==TDynArray.Destroy==}
Procedure TDynArray.Resize(NewDimension: TDynArrayNDX);
BEGIN {TDynArray.Resize==}
if (NewDimension < 1) then raise EDynArrayRangeError.CreateFMT('Индекс вышел за границы диапазона : %d', [NewDimension]);
Elements:= ReAllocMem(Elements, fMemAllocated, NewDimension*sizeof(TDynArrayBaseType));
fDimension:= NewDimension;
fMemAllocated:= fDimension*sizeof(TDynArrayBaseType);
END; {TDynArray.Resize==}
Function TDynArray.GetElement(N: TDynArrayNDX) : TDynArrayBaseType;
Поделиться:
Популярные книги
Live-rpg. эволюция-3
3. Эволюция. Live-RPG
Фантастика:
боевая фантастика
6.59
рейтинг книги
Пушкарь. Пенталогия
Фантастика:
альтернативная история
8.11
рейтинг книги
Хроники разрушителя миров. Книга 8
8. Хроники разрушителя миров
Фантастика:
фэнтези
5.00
рейтинг книги
Адъютант
2. Мания крафта
Фантастика:
фэнтези
6.43
рейтинг книги
Эфир. Терра 13. #2
2. Совет Видящих
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VI
6. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Измена
Любовные романы:
современные любовные романы
5.38
рейтинг книги
Я – Орк. Том 2
2. Я — Орк
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Законы Рода. Том 2
2. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Корпулентные достоинства, или Знатный переполох. Дилогия
Фантастика:
юмористическая фантастика
7.53
рейтинг книги
Тринадцатый
1. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
6.80
рейтинг книги
Темный Патриарх Светлого Рода
1. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Раб и солдат
1. Штык и кинжал
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Волк 5: Лихие 90-е
5. Волков
Фантастика:
попаданцы
альтернативная история
5.00