Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

получение динамического массива из функции(процедуры)


novice ©   (2007-06-08 18:46:00) 

Нужна помощь в реализации .
Есть процедура(функция) должна возвращать список целых чисел, размер списка неизвестен заранее.
Манипуляции
с TIntegerDynArray и SetLength результат не дали, либо не так делаю.


Jeer   (2007-06-09 12:47:00) [1]

да заговорился:))


clickmaker   (2007-06-09 12:27:00) [2]

см. procedure DynArraySetLength в System.pas, в общем


clickmaker   (2007-06-09 12:20:00) [3]


> Локальных внутри функции ?

var a: array of integer;

setlength(a, 200000); - в стеке?


Jeer   (2007-06-09 12:12:00) [4]


> begin...end ©   (09.06.07 10:21) [7]


Локальных внутри функции ? вроде - да.
Или я чего-то пропустил ?


begin...end   (2007-06-09 10:21:00) [5]

> Jeer ©   (09.06.07 09:59) [6]

> С локальными массивами лучше поаккуратней - стек не резиновый.

А что, тела динамических массиов теперь размещаются в стеке? Я что-то пропустил?


Jeer   (2007-06-09 09:59:00) [6]

novice   (08.06.07 18:46)

Ничто не мешает это сделать даже так:

type TIntArray = array of integer;

var arInt: TIntArray;

procedure MyProc(var arI: TIntArray);
begin
//
SetLength(arI, 10);
arI[0] := 0;
arI[1] := 1;
arI[2] := 2;
//
end;

MyProc(arInt);

>я делал локальную переменную массива, а потом
>result:=local_array;

С локальными массивами лучше поаккуратней - стек не резиновый.


Однокамушкин   (2007-06-09 09:05:00) [7]


> isasa ©   (08.06.07 21:56) [2]
> В любомьалгоритме должен быть прогнозируемый возврат(надеюсь
> ты не всю Вселенную хочешь). Если не заданно сколько, скажи
> сколько надо ...

Спорный вопрос... в функциональных языках с ленивым вычислением можно вообще объявлять структуры с бесконечным размером и спокойно работать с ними... расчёт на то, что любой алгоритм за конечное время доберётся только до конечного числа элементов такой структуры, а за счёт ленивого вычисления эти элементы реально появляются в структуре только тогда, когда в них возникает необходимость...


> novice   (08.06.07 22:27) [4]
> я делал локальную переменную массива, а потом
> result:=local_array;

Вполне нормальный вариант, должно работать...


novice   (2007-06-08 22:27:00) [8]


> В любомьалгоритме должен быть прогнозируемый возврат(надеюсь
> ты не всю Вселенную хочешь).

прогнозируемый возврат есть,
но зачем же тогда динамические массивы придумали ?

2 Джо
спасиб, попробую

я делал локальную переменную массива, а потом
result:=local_array;


Джо   (2007-06-08 22:00:00) [9]

function A: TDynArray;
begin
 SetLength (Result, L);
 Result[N] := ...
end;


isasa   (2007-06-08 21:56:00) [10]

В любомьалгоритме должен быть прогнозируемый возврат(надеюсь ты не всю Вселенную хочешь). Если не заданно сколько, скажи сколько надо ...


Desdechado   (2007-06-08 19:20:00) [11]

> либо не так делаю.
Как "не так"?


Наверх

Титульная страница Поиск, карта сайта Написать письмо