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

Вниз

Рекурсия и переменные   Найти похожие ветки 

 
webpauk   (2005-02-25 14:22) [0]

подскажите pls, как в рекурсивной функции передать параметр (Dynamic array)?  

function Something(var fR: array of Trect): Boolean;
begin
 Result:=False;
 if SomeEvent then
 begin
   Result:=True;
   Exit;
 end;
 SetLength(fR, Length(fR)+1);
 fR[Length(fR)-1]:=fSomeRect;
 Result:=Result or Something(fR);
end;


Если всё зергут, то как обратиться к такой функции? (!)

Потому как если:
Something([]) - пройдет, то
function Something(fR: array of Trect): Boolean;
begin
SetLength(fR, Length(fR)+1); - ошибка компиляции
end;


 
КаПиБаРа ©   (2005-02-25 14:24) [1]

type
 TRectArray: array of Trect
...

function Something(var fR: TRectArray): Boolean;


 
Алхимик ©   (2005-02-25 14:25) [2]

type
MyArray = array of TRect;

function Something(fR: MyArray): Boolean;


 
Digitman ©   (2005-02-25 14:25) [3]


> в рекурсивной


рекурсия-то здесь причем ?


 
КаПиБаРа ©   (2005-02-25 14:28) [4]

webpauk   (25.02.05 14:22)
SetLength(fR, Length(fR)+1);


Увеличивать массив на 1 элемент не оптимально. Очень тормозит программу. Можно ввести доп. переменную отвечающую за кол-во заполненных элементов и при необходимости увеличивать массив на большее количество элементов.


 
begin...end ©   (2005-02-25 14:29) [5]

> webpauk   (25.02.05 14:22)

> function Something(var fR: array of Trect): Boolean;

Здесь fR - это не динамический, а открытый массив. См. в справке: open array parameters.

Вам нужно объявить свой тип динамического массива. Например:

type
 TRectArray = array of TRect;

function Something(var RectArray: TRectArray): Boolean;
begin
 ...
 SetLength(RectArray, ...)
 ...
end;

var
 Arr: TRectArray;

begin
 ... := Something(Arr)
end.



Страницы: 1 вся ветка

Текущий архив: 2005.03.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
6-1105025356
Surrender1
2005-01-06 18:29
2005.03.13
Как определить имя пользователя подключаемого к моему WEB


4-1107172813
BaDeVlad
2005-01-31 15:00
2005.03.13
Как вывести Unicode-строку?


1-1109497219
Sam Stone
2005-02-27 12:40
2005.03.13
Работа с экселем


1-1109375074
oleg_SYS
2005-02-26 02:44
2005.03.13
Глобальная обработка ошибок приложения


3-1108019366
Dmitry
2005-02-10 10:09
2005.03.13
Проблемы с Firebird 1.5?