Вот несколько функций для операций с двухмерными массивами. Самый простой путь для создания собственной библиотеки. Процедуры SetV и GetV позволяют читать и сохранять элементы массива VArray (его Вы можете объявить как угодно). Например:

 

Возможно ли создание массива компонентов? Для показа статуса я использую набор LED-компонентов и хотел бы иметь к ним доступ, используя массив.

 Прежде всего необходимо объявить массив:

Code:

function Among(N: Integer; const Values: arrayof Integer): LongBool;

asm

push ebx

xor ebx, ebx

@@10:

test ecx, ecx

jl @@30

cmp eax, [edx]

jne @@20

not ebx

jmp @@30

@@20:

add edx, 4

dec ecx

jmp @@10

@@30:

mov eax, ebx

pop ebx

end;

Пример использования:

 

Among(N, [1, 2, 3, 4, 5])

 

MaxIntValue Возвращает наибольшее значение целочисленного массива.

MaxValue Возвращает наибольшее значение числового массива.

Mean Вычисляет среднее арифметическое всех значений массива.

MeanAndStdDev Вычисляет среднее арифметическое всех значений массива, и среднее отклонение.

MinIntValue Возвращает наименьшее значение целочисленного массива.

MinValue Возвращает наименьшее значение числового массива.

MomentSkewKurtosis Вычисляет среднее значение, дисперсию, отклонение и периодичность.

Norm Возвращает Евклидову норму для всех значений массива.

PopnStdDev Вычисляет среднеквадратичное отклонение для совокупности данных.

PopnVariance Вычисляет дисперсию совокупности данных.

StdDev Вычисляет стандартное среднеквадратичное отклонение элементов массива.

Sum Вычисляет сумму значений всех элементов числового массива.

SumInt Вычисляет сумму значений всех элементов целочисленного массива.

SumOfSquares Вычисляет сумму квадратов всех элементов числового массива.

SumsAndSquares Возвращает сумму элементов и сумму квадратов всех элементов числового массива.

TotalVariance Вычисляет статистическую дисперсию.

Variance Вычисляет типовую дисперсию всех значений массива.

Распределите память кучи с помощью GetMem. Если вы имеете:

 

Code:

var a, b: array[0..30000]: Integer;

 

то попробуйте:

 

Code:

type TBigArray = array[0..30000] of Integer;

var a, b: ^TBigArray;

 

 

и во внешнем блоке сделайте:

Code:

GetMem(a, SizeOf(TBigArray));

GetMem(b, SizeOf(TBigArray));

 

Задачу поиска минимального элемента массива рассмотрим на примере массива целых чисел.

 

Алгоритм поиска минимального (максимального) элемента массива довольно очевиден: сначала делается предположение, что первый элемент массива является минимальным (максимальным), затем остальные элементы массива последовательно сравниваются с этим элементом. Если во время очередной проверки обнаруживается, что проверяемый элемент меньше (больше) принятого за минимальный (максимальный), то этот элемент становится минимальным (максимальным) и продолжается проверка оставшихся элементов.

 

Code:

type

T2DBooleanArray = arrayofarrayof Boolean;

 

procedure Save2DBooleanArray(const A: T2DBooleanArray; S: TStream);

var

writer: TWriter;

i: Integer;

begin

 

"Array of const" это массив переменных, декларированных как константы. Непосредственно они представлены структурой TVarRec. Скобки просто ограничивают массив. Массив констант дает вам возможность передавать процедуре переменное количество параметров type-safe (безопасным) способом. Вот пример:

 

Я решил проблему записи массива TBitmap в файл и его повторного чтения.

 

Идея заключается в загрузке каждого TBitmap во временный TMemoryStream. Член TMemoryStream.Size информирует о размере данных, которые нужно сохранить на диске. Затем мы пишем размер и сопровождаем его данными типа TFileStream. Эту манипуляцию мы проделываем для каждого TBitmap в массиве.

 

Для процедуры чтения сначала мы должны считать из потока размер данных TBitmap. Затем мы распределяем область для типа TMemoryStream полученного размера и считываем данные. Затем переписываем из TFileStream в TMemoryStream. И, наконец, мы читает из TMemoryStream сам TBitmap. Эту манипуляцию мы проделываем для каждого TBitmap в массиве.

 

Ниже я привел код, который я реально использовал. Код из игры Bingo, которую я разрабатываю, имеет сетку 5x5, чьи ячейки содержат изображение.

 

Очень простой пример...

Code:

const

MaxBooleans = (High(Cardinal) - $F) div sizeof(boolean);

 

type

TBoolArray = array[1..MaxBooleans] of boolean;

PBoolArray = ^TBoolArray;

 

var

B: PBoolArray;

N: integer;

 

begin

N := 63579;

{= получение памяти под динамический массив.. =}

GetMem(B, N * sizeof(boolean));

{= работа с массивом... =}

B^[3477] := FALSE;

{= возвращение памяти в кучу =}

{$IFDEF VER80}

FreeMem(B, N * sizeof(boolean));

{$ELSE}

FreeMem(B);

{$ENDIF}

end.

Code:

type

TArrayString = arrayofstring;

 

procedure DeleteArrayIndex(var X: TArrayString; Index: Integer);

begin

ifIndex > High(X) then Exit;

ifIndex < Low(X) then Exit;

ifIndex = High(X) then

begin

   SetLength(X, Length(X) - 1);

   Exit;

end;

Finalize(X[Index]);

System.Move(X[Index +1], X[Index],

(Length(X) - Index -1) * SizeOf(string) + 1);

SetLength(X, Length(X) - 1);

end;

 

// Example : Delete the second item from array a

// Beispiel : Losche das 2. Element vom array a

 

procedure TForm1.Button2Click(Sender: TObject);

var

a: TArrayString;

begin

DeleteArrayIndex(a, 2);

end;

 

Взято с сайтаhttp://www.swissdelphicenter.ch/en/tipsindex.php