Главная страница
    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.48 MB
Время: 0.004 c
1-1178253295
pohil
2007-05-04 08:34
2007.07.01
CDATA в XML


3-1175600650
natasha13
2007-04-03 15:44
2007.07.01
Изменение данных в Query


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


2-1181246808
koha
2007-06-08 00:06
2007.07.01
Как узнать сколько раз процесс подключался к процессору?


15-1178506367
Adic
2007-05-07 06:52
2007.07.01
Cравнительная характеристика MicroCAP, Electronics Workbench и тд





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