Форум: "Начинающим";
Текущий архив: 2007.07.01;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c