Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.04 c
15-1180505544
Эй.
2007-05-30 10:12
2007.06.24
FreeBSD


2-1180696532
koha
2007-06-01 15:15
2007.06.24
Получить из ProcessID ProcessHandle?


4-1168961302
TProgrammer
2007-01-16 18:28
2007.06.24
Приоритет процессов


1-1177498600
Грициан
2007-04-25 14:56
2007.06.24
Что неверно в этом коде?


15-1180365582
PHPdeveloper
2007-05-28 19:19
2007.06.24
есть энтузиасты :) ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский