Форум: "Начинающим";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];
ВнизГлобальный массив с переменной в качестве параметра Найти похожие ветки
← →
andreyKa (2007-06-02 11:19) [0]Нужно описать глобальный массив, но размер задать с помощью переменной, которая будет определена после начала выполнения кода (расчетным способом).
К примеру:
var Size : integer;
Arr : array [1 .. Size] of double;
begin
Size := 5 * raschet_size();
end;
Как это можно сделать, при таком объявление он пишит: Constant expression expected, может я что не так делаю?
Динамический массив не могу использовать в связи со специфичностью задачи.
← →
Однокамушкин (2007-06-02 11:21) [1]
var arr: array of Double;
begin
Size := ...
SelLength(arr, Size);
только учтите, что индекс у такого массива будет от 0 до Size-1, а не от 1 до Size...
← →
andreyKa (2007-06-02 11:22) [2]А если понадобиться двумерный массив, его можно будет как нибудь объявить таким же способом?
← →
Kolan © (2007-06-02 11:24) [3]> но размер задать с помощью переменной,
> Динамический массив не могу использовать в связи со специфичностью
> задачи.
Именно он тебе и нужен, имхо.
← →
andreyKa (2007-06-02 11:27) [4]> Kolan © (02.06.07 11:24) [3]
Я понимаю что надо использовать динамический массив, но размер кода очень большой и все сделано на статическом массиве, а сейчас возникла необходимость переделать под изменяемый размер массив, а переписать весь код достаточно проблематично.
← →
andreyKa (2007-06-02 11:37) [5]Вообщем мне все ясно, эту проблему придется видимо действительно решать с помощью динамического массива, а как не хочется :(
← →
Kolan © (2007-06-02 11:50) [6]> но размер кода очень большой и все сделано на статическом
> массиве
А что есть большая разница? Только размер указывать. Работа то подчти такая же.
> весь код достаточно проблематично
Превиди пример кода — интересно.
← →
MBo © (2007-06-02 12:02) [7]какие свойства динамического массива препятствуют его использованию?
может, такое подойдет:
PIntArray = ^TIntArray;
TIntArray = array[0..0] of Integer;
...
GetMem(PIntArrayVar, Size * SizeOf(Integer))
← →
Германн © (2007-06-02 12:08) [8]Ну уж на худой конец:
type
TMyArr = array[1..MaxInt] of Double;
PMyArr = ^TMyArr;
var
Size : Integer;
begin
Size := 5 * raschet_size();
GetMem(PMyArr,Size);
← →
Leonid Troyanovsky © (2007-06-02 12:41) [9]
> MBo © (02.06.07 12:02) [7]
> может, такое подойдет:
Turbo Delhi: Constant expression violates subrange bounds (x1012)
при попытке выхода из 0..0.
Так, что сейчас надо явно задавать верхнюю границу как,
например, в [8].
--
Regards, LVT.
← →
Leonid Troyanovsky © (2007-06-02 12:43) [10]
> Leonid Troyanovsky © (02.06.07 12:41) [9]
> например, в [8].
Только, конечно, не MaxInt :)
--
Regards, LVT.
← →
MBo © (2007-06-02 12:49) [11]>Leonid Troyanovsky
опция $R- спасет
← →
Leonid Troyanovsky © (2007-06-02 14:16) [12]
> 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 16:33) [13]>Leonid Troyanovsky
Да, действительно, вспомнил, что на это натыкался с какой-то из WinAPI-шных структур, пришлось обходить заменой константы на переменную.
← →
assa (2007-06-03 11:52) [14]как-то использовал такой код для двумерного динамического массива
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);
← →
Anatoly Podgoretsky © (2007-06-03 12:03) [15]> assa (03.06.2007 11:52:14) [14]
А не судьба сразу SetLength(arr, calc_size_x,calc_size_y);
← →
assa (2007-06-03 12:07) [16]
> SetLength(arr, calc_size_x,calc_size_y);
Гы)))
не знал про это...
правда, в свое оправдание могу сказать, что я писал это без справки
← →
sniknik © (2007-06-03 12:27) [17]> правда, в свое оправдание могу сказать, что я писал это без справки
это не оправдание, это диагноз... с вручение метлы в конце неудачного лечения.
← →
Думкин © (2007-06-04 08:01) [18]> andreyKa (02.06.07 11:37) [5]
Чтобы безболезненно переходить, в циклах нужно использовать Low и High, тогда без разницы какой массив и вся специфичность уходит.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.068 c