Главная страница
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.021 c
6-1164056733
kilonet
2006-11-21 00:05
2007.07.01
Соединение двух компьютеров через модем


3-1175663068
greg123
2007-04-04 09:04
2007.07.01
При переливе из gdb-ки в dbf-ку - сообщение "Out of memory"


2-1181130039
dr_craigan
2007-06-06 15:40
2007.07.01
работа с файлами


15-1180852484
homm
2007-06-03 10:34
2007.07.01
win98 & 95


2-1181321734
buben
2007-06-08 20:55
2007.07.01
Скрыть иконку в тулбар