Чтение онлайн

на главную

Жанры

Советы по 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
рейтинг книги
Live-rpg. эволюция-3

Пушкарь. Пенталогия

Корчевский Юрий Григорьевич
Фантастика:
альтернативная история
8.11
рейтинг книги
Пушкарь. Пенталогия

Хроники разрушителя миров. Книга 8

Ермоленков Алексей
8. Хроники разрушителя миров
Фантастика:
фэнтези
5.00
рейтинг книги
Хроники разрушителя миров. Книга 8

Адъютант

Демиров Леонид
2. Мания крафта
Фантастика:
фэнтези
6.43
рейтинг книги
Адъютант

Эфир. Терра 13. #2

Скабер Артемий
2. Совет Видящих
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эфир. Терра 13. #2

Кодекс Крови. Книга VI

Борзых М.
6. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VI

Измена

Рей Полина
Любовные романы:
современные любовные романы
5.38
рейтинг книги
Измена

Я – Орк. Том 2

Лисицин Евгений
2. Я — Орк
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я – Орк. Том 2

Законы Рода. Том 2

Flow Ascold
2. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 2

Корпулентные достоинства, или Знатный переполох. Дилогия

Цвик Катерина Александровна
Фантастика:
юмористическая фантастика
7.53
рейтинг книги
Корпулентные достоинства, или Знатный переполох. Дилогия

Тринадцатый

NikL
1. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
6.80
рейтинг книги
Тринадцатый

Темный Патриарх Светлого Рода

Лисицин Евгений
1. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода

Раб и солдат

Greko
1. Штык и кинжал
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Раб и солдат

Волк 5: Лихие 90-е

Киров Никита
5. Волков
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Волк 5: Лихие 90-е