![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Рекурсия и переменные [D6, WinXP]
webpauk © (2005-02-25 14:22:00)подскажите 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;
begin...end (2005-02-25 14:29:00) [1]> 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.
КаПиБаРа (2005-02-25 14:28:00) [2]webpauk (25.02.05 14:22)
SetLength(fR, Length(fR)+1);
Увеличивать массив на 1 элемент не оптимально. Очень тормозит программу. Можно ввести доп. переменную отвечающую за кол-во заполненных элементов и при необходимости увеличивать массив на большее количество элементов.
Алхимик (2005-02-25 14:25:00) [3]
type
MyArray = array of TRect;
function Something(fR: MyArray): Boolean;
Digitman (2005-02-25 14:25:00) [4]
> в рекурсивной
рекурсия-то здесь причем ?
КаПиБаРа (2005-02-25 14:24:00) [5]type
TRectArray: array of Trect
...
function Something(var fR: TRectArray): Boolean;