Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1181210608
leonidus
2007-06-07 14:03
2007.07.01
Проблема с обращением к dll


2-1181132293
Megabyte
2007-06-06 16:18
2007.07.01
Перечислимый тип в строку


3-1175625608
Hydroliskus
2007-04-03 22:40
2007.07.01
BDE выдает ошибку row fetch limit exceeded


5-1147886682
Любопытствующий
2006-05-17 21:24
2007.07.01
Наследник TImage с парочкой новых свойств


2-1181043793
timonissimo
2007-06-05 15:43
2007.07.01
не удается найти строку для обновления





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