Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.038 c
1-1109478796
АлексН
2005-02-27 07:33
2005.03.13
Замена Application.ProcessMessages


14-1109002104
YurikGL
2005-02-21 19:08
2005.03.13
Белорусы - молодцы!


14-1108887275
YurikGL
2005-02-20 11:14
2005.03.13
SY576


3-1108060910
Step[B.M.]
2005-02-10 21:41
2005.03.13
Как заставить FireBird сортировать кирилицу по "человечески"?


1-1109690443
Nicotin
2005-03-01 18:20
2005.03.13
Как перехватить нажатие кнопки?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский