Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.24;
Скачать: CL | DM;

Вниз

Глобальный массив с переменной в качестве параметра   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
11-1163128856
SKA1997
2006-11-10 06:20
2007.06.24
ALT + TAB


15-1180003739
WondeRu at work
2007-05-24 14:48
2007.06.24
Лженаука, присвоение или освоение бюджета


15-1180347760
micke_2007
2007-05-28 14:22
2007.06.24
Вопрос о Shop-Script-Primium


2-1180972887
crypt
2007-06-04 20:01
2007.06.24
Как из Memo сохранять и добавлять информацию в файл или в БД?


11-1162570768
MTsv DN
2006-11-03 19:19
2007.06.24
BitBtn.Enabled := False