![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Объявление предела массива
Motion © (2005-06-04 18:06:00)При объявлении массива с количеством элементов X[1..n] необходимо сначала задать n, а n берётся с компонента spinedit.
Но сначала, объявляется массив, о потом считывается n. Можно ли зделать наоборот? Пример кода:
var n:integer;
var X: array[1..n] of real;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
n:=spinedit1.value;
end;
begin...end (2005-06-04 18:54:00) [1]> Motion © (04.06.05 18:06)
type
TMyArray = array [1..MaxInt div sizeof(Real)] of Real;
var
X: ^TMyArray;
N: Integer;
begin
N := ...;
GetMem(X, N * sizeof(Real));
try
X[1] := ...
...
finally
FreeMem(X)
end
end.
Недостаток: необходимо строго следить за корректностью индексов массива.
Anatoly Podgoretsky (2005-06-04 18:43:00) [2]Motion © (04.06.05 18:26) [6]
Как обращался к нулевому?
Motion (2005-06-04 18:26:00) [3]Получилось как посоветовал MBo, а теперь необходимо обратится не к нулевому а к первому элементу.
KilkennyCat (2005-06-04 18:22:00) [4][4] - фигня.
можно просто неиспользовать нулевой элемент.
KilkennyCat (2005-06-04 18:21:00) [5]нет, но что мешает использовать нужный коэффициент при обращении к элементу? n[x+k], где k = 1 в требуемом случае. Разумеется, необходимо также учитывать, что некорректное обращение к последнему элементу вызовет ошибку.
Anatoly Podgoretsky (2005-06-04 18:19:00) [6]Motion © (04.06.05 18:14) [2]
А зачем? Можешь эмулировать.
Motion (2005-06-04 18:14:00) [7]А можно с 1-цы?
MBo (2005-06-04 18:13:00) [8]Можно использовать динамические массивы
X:array of Double;
...
SetLength(X,spinedit1.value);
нумерация с нуля!