![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Глобальный массив с переменной в качестве параметра [D7, WinXP]
andreyKa © (2007-06-02 11:19:00)Нужно описать глобальный массив, но размер задать с помощью переменной, которая будет определена после начала выполнения кода (расчетным способом).
К примеру:
var Size : integer;
Arr : array [1 .. Size] of double;
begin
Size := 5 * raschet_size();
end;
Как это можно сделать, при таком объявление он пишит: Constant expression expected, может я что не так делаю?
Динамический массив не могу использовать в связи со специфичностью задачи.
Думкин (2007-06-04 08:01:00) [1]> andreyKa (02.06.07 11:37) [5]
Чтобы безболезненно переходить, в циклах нужно использовать Low и High, тогда без разницы какой массив и вся специфичность уходит.
sniknik (2007-06-03 12:27:00) [2]> правда, в свое оправдание могу сказать, что я писал это без справки
это не оправдание, это диагноз... с вручение метлы в конце неудачного лечения.
assa (2007-06-03 12:07:00) [3]
> SetLength(arr, calc_size_x,calc_size_y);
Гы)))
не знал про это...
правда, в свое оправдание могу сказать, что я писал это без справки
Anatoly Podgoretsky (2007-06-03 12:03:00) [4]> assa (03.06.2007 11:52:14) [14]
А не судьба сразу SetLength(arr, calc_size_x,calc_size_y);
assa (2007-06-03 11:52:00) [5]как-то использовал такой код для двумерного динамического массива
type
TArray = array of integer;
arr: array of TArray;
var
i,k: integer;
begin
SetLength(arr,calc_size_x);
for i:=0 to calc_size_x-1 do
SetLength(arr[i],calc_size_y);
MBo (2007-06-02 16:33:00) [6]>Leonid Troyanovsky
Да, действительно, вспомнил, что на это натыкался с какой-то из WinAPI-шных структур, пришлось обходить заменой константы на переменную.
Leonid Troyanovsky (2007-06-02 14:16:00) [7]
> MBo © (02.06.07 12:49) [11]
> опция $R- спасет
Нет, это не то.
This error message occurs when the compiler can determine that
a constant is outside the legal range
--
Regards, LVT.
MBo (2007-06-02 12:49:00) [8]>Leonid Troyanovsky
опция $R- спасет
Leonid Troyanovsky (2007-06-02 12:43:00) [9]
> Leonid Troyanovsky © (02.06.07 12:41) [9]
> например, в [8].
Только, конечно, не MaxInt :)
--
Regards, LVT.
Leonid Troyanovsky (2007-06-02 12:41:00) [10]
> MBo © (02.06.07 12:02) [7]
> может, такое подойдет:
Turbo Delhi: Constant expression violates subrange bounds (x1012)
при попытке выхода из 0..0.
Так, что сейчас надо явно задавать верхнюю границу как,
например, в [8].
--
Regards, LVT.
Германн (2007-06-02 12:08:00) [11]Ну уж на худой конец:
type
TMyArr = array[1..MaxInt] of Double;
PMyArr = ^TMyArr;
var
Size : Integer;
begin
Size := 5 * raschet_size();
GetMem(PMyArr,Size);
MBo (2007-06-02 12:02:00) [12]какие свойства динамического массива препятствуют его использованию?
может, такое подойдет:
PIntArray = ^TIntArray;
TIntArray = array[0..0] of Integer;
...
GetMem(PIntArrayVar, Size * SizeOf(Integer))
Kolan (2007-06-02 11:50:00) [13]> но размер кода очень большой и все сделано на статическом
> массиве
А что есть большая разница? Только размер указывать. Работа то подчти такая же.
> весь код достаточно проблематично
Превиди пример кода интересно.
andreyKa (2007-06-02 11:37:00) [14]Вообщем мне все ясно, эту проблему придется видимо действительно решать с помощью динамического массива, а как не хочется :(
andreyKa (2007-06-02 11:27:00) [15]> Kolan © (02.06.07 11:24) [3]
Я понимаю что надо использовать динамический массив, но размер кода очень большой и все сделано на статическом массиве, а сейчас возникла необходимость переделать под изменяемый размер массив, а переписать весь код достаточно проблематично.
Kolan (2007-06-02 11:24:00) [16]> но размер задать с помощью переменной,
> Динамический массив не могу использовать в связи со специфичностью
> задачи.
Именно он тебе и нужен, имхо.
andreyKa (2007-06-02 11:22:00) [17]А если понадобиться двумерный массив, его можно будет как нибудь объявить таким же способом?
Однокамушкин (2007-06-02 11:21:00) [18]
var arr: array of Double;
begin
Size := ...
SelLength(arr, Size);
только учтите, что индекс у такого массива будет от 0 до Size-1, а не от 1 до Size...