Вот несколько функций для операций с двухмерными массивами. Самый простой путь для создания собственной библиотеки. Процедуры SetV и GetV позволяют читать и сохранять элементы массива VArray (его Вы можете объявить как угодно). Например:
Code: |
type VArray: array[1..1] of double;
var X: ^VArray; NR, NC: Longint;
begin NR := 10000; NC := 100; if AllocArray(pointer(X), N * Sizeof(VArray)) then exit; SetV(X^, NC, 2000, 5, 3.27); { X[2000,5] := 3.27 } end;
function AllocArray(var V: pointer; const N: longint): Boolean; begin{распределяем память для массива V размера N} try GetMem(V, N); except ShowMessage('ОШИБКА выделения памяти. Размер:' + IntToStr(N)); Result := True; exit; end; FillChar(V^, N, 0); {в случае включения длинных строк заполняем их нулями} Result := False; end;
procedure SetV(var X: Varray; const N, ir, ic: LongInt; const value: double); begin{заполняем элементами двухмерный массив X размером ? x N : X[ir,ic] := value}
X[N * (ir - 1) + ic] := value; end;
function GetV(const X: Varray; const N, ir, ic: Longint): double; begin{возвращаем величины X[ir,ic] для двухмерного массива шириной N столбцов} Result := X[N * (ir - 1) + ic]; end; |
Самый простой путь - создать массив динамически
Code: |
Myarray := GetMem(rows * cols * sizeof(byte,word,single,double и пр.) |
сделайте функцию fetch_num типа
Code: |
function fetch_num(r,c:integer) : single;
result := pointer + row + col*rows |
и затем вместо myarray[2,3] напишите
Code: |
myarray.fetch_num(2,3) |
поместите эти функции в ваш объект и работа с массивами станет пустячным делом. Я экспериментировал с многомерными (вплоть до 8) динамическими сложными массивами и эти функции показали отличный результат.
- Назад
- Вперёд >>
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!