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

Вниз

Array Pointer   Найти похожие ветки 

 
webpauk   (2007-06-07 16:16) [0]

есть несколько array of TmyRec (Arr1, Arr2, Arr3).
Подскажите как при разных условиях использовать единую процедуру для работы с массивом:

var
fArr: Pointer;
begin
if условие then fArr:=Arr1;
if условие then fArr:=Arr2;
if условие then fArr:=Arr3;

SetLength(?fArr?, Length(?fArr?)+1);
end;


 
Desdechado ©   (2007-06-07 16:25) [1]

Если они одного типа, то какие проблемы? Объяви еще одну переменную и юзай ее.


 
Palladin ©   (2007-06-07 16:26) [2]

Type
TMyIntArray=Array of Integer;

Var
c,a1,a2,a3:^TMyIntArray;
begin
c:=a1;
SetLength(c^,5);
end;


 
Reindeer Moss Eater ©   (2007-06-07 16:26) [3]

А зачем первые три строки после бегина?
И почему прямо там не установить длину?


 
Palladin ©   (2007-06-07 16:27) [4]

ну и конечно еще перед этим нужно cделать New(a1), New(a2), New(a3)


 
webpauk   (2007-06-07 16:31) [5]


> Reindeer Moss Eater ©   (07.06.07 16:26) [3]

я хочу в процедуре работать с одним array, а не делать в зависимости от условия 100 одинаковых процедур с разными array


 
Reindeer Moss Eater ©   (2007-06-07 16:32) [6]

так у тебя уже вилка в коде на три строки


 
webpauk   (2007-06-07 16:36) [7]


> Reindeer Moss Eater ©   (07.06.07 16:32) [6]

if условие1 then
if условие2 then

так лучше?


 
Reindeer Moss Eater ©   (2007-06-07 16:38) [8]

Это одно и тоже. В зависимости от условия работаешь с той или иной переменной.


 
webpauk   (2007-06-07 16:45) [9]


> Reindeer Moss Eater ©   (07.06.07 16:38) [8]


if I=1 then
begin
  SetLength(Arr1, Length(Arr1)+1);
  Arr1[Length(Arr1)-1):=I;
end;
if I=2 then
begin
  SetLength(Arr2, Length(Arr2)+1);
  Arr2[Length(Arr2)-1):=I;
end;
if I=3 then
begin
  SetLength(Arr3, Length(Arr3)+1);
  Arr3[Length(Arr3)-1):=I;
end;

так что ли, по-твоему?


 
авыф   (2007-06-07 16:57) [10]

если уж писать то так:
case I of
1: begin
 SetLength(Arr1, Length(Arr1)+1);
 Arr1[Length(Arr1)-1):=I;
end;
2: begin
 SetLength(Arr2, Length(Arr2)+1);
 Arr2[Length(Arr2)-1):=I;
end;
3: begin
 SetLength(Arr3, Length(Arr3)+1);
 Arr3[Length(Arr3)-1):=I;
end;
end;


 
webpauk   (2007-06-07 16:58) [11]


> Palladin ©   (07.06.07 16:26) [2]

сам то пробовал?


 
Сергей М. ©   (2007-06-07 17:05) [12]


> webpauk   (07.06.07 16:16)


Разместить все свои массивы не в отдельных переменных, а в массиве - религия не позволяет ?

Или первый раз слышишь про возможность организации массива массивов ?


 
webpauk   (2007-06-07 17:12) [13]


> Сергей М. ©   (07.06.07 17:05) [12]

как-то не догадался
спсб


 
webpauk   (2007-06-07 17:12) [14]


> Palladin ©   (07.06.07 16:26) [2]

Var
 a1,a2,a3: TMyIntArray;
 c: ^TMyIntArray;
begin
 c:=@a1;
 SetLength(c^, 5);
 ShowMessage(IntToStr(High(c^))+#13+IntToStr(High(a1)));
end;


 
Palladin ©   (2007-06-07 17:22) [15]


> webpauk   (07.06.07 17:12) [14]

для особо одаренных, а ты внимательней посмотри что написано в примере

Var
c,a1,a2,a3:^TMyIntArray;

а не
Var
a1,a2,a3:TMyIntArray;
c:^TMyArray;


 
webpauk   (2007-06-07 18:06) [16]


> Palladin ©   (07.06.07 17:22) [15]

сам попробуй свой пример на практике


 
Плохиш ©   (2007-06-08 01:37) [17]


> webpauk   (07.06.07 18:06) [16]

Ты вообще о том, что процедуры и функции могут иметь параметры, которые можно в них изменять знаешь? Стоило в конце-то концов наконец книжку-какую почитать.

PS. Обычно люди в процессе выполнения какой-то работы повышают своё мастерство, но ты, судя по твоим вопросам, к сожалению, к этим людям не относишься :-(


 
Loginov Dmitry ©   (2007-06-08 09:40) [18]

> c,a1,a2,a3:^TMyIntArray;


Зачем крышечка-то?

Можно и так объявить:
var
 c,a1,a2,a3:TMyIntArray;

а присвоение
c := a1 в случае дин. массива приведет к копированию адреса с увеличением счетчика ссылок.



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

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

Наверх




Память: 0.5 MB
Время: 0.022 c
15-1180730508
Иксик
2007-06-02 00:41
2007.07.01
Куда пойти в Риге, если в запасе всего 4-6 часов?


2-1181068367
DimDim
2007-06-05 22:32
2007.07.01
Программно установить ActiveSheet


15-1180451994
Alx2
2007-05-29 19:19
2007.07.01
Жара


5-1156746038
vodvorezlaya
2006-08-28 10:20
2007.07.01
Вопрос по замене свойства компонента UpDown


3-1175757826
derm
2007-04-05 11:23
2007.07.01
ADO кодировка