![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте. Задался глупым вопросом: каким образом можно передать поле записи через параметр процедуры/функции?
На примере: Код:
type TM = record A:integer; B:integer; C:integer; end; var Form1: TForm1; M:TM; implementation procedure GAVGAV( ??? ); begin M.X:=5; end; ... Долго думал, но так и не придумал. Подскажите пожалуйста. |
#2
|
||||
|
||||
![]() Код:
procedure GAVGAV(var M:TM); begin M.X:=5; end; ... GAVGAV(M); Никакого поля Х, там быть не может. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
|||
|
|||
![]() Нет, дело в том, что мне нужно чтобы в сторонней процедуре я мог набрать нечто вроде
Код:
GAVGAV(A,5); // При этом к M.A добавлялось, к примеру, 5 GAVGAV(B,2); // При этом к M.B добавлялось 2 Код:
procedure(X:??;Num:integer); begin M.X := M.X+ Num; end; |
#4
|
||||
|
||||
![]() Немного не так:
Код:
procedure(var X : Integer; Num : Integer); begin X := X + Num; end; ... GAVGAV(M.A, 5); // При этом к M.A добавлялось, к примеру, 5 GAVGAV(M.B, 2); // При этом к M.B добавлялось 2 Код:
function(X : Integer; Num : Integer) : Integer; begin Result := X + Num; end; ... M.A := GAVGAV(M.A, 5); // При этом к M.A добавлялось, к примеру, 5 M.B := GAVGAV(M.B, 2); // При этом к M.B добавлялось 2 Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 30.03.2012 в 23:41. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Kepler (31.03.2012)
|
#5
|
|||
|
|||
![]() Понял, спасибо. Тем не менее через переменную X поле передать нельзя? Дело просто в том, что в основной программе у меня массив из записей, в каждой из которой несколько полей. Я не могу войти в поле записи, как это предлагаете вы, когда у меня массив, а не один record.
|
#6
|
||||
|
||||
![]() Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
||||
|
||||
![]() Код:
var m:array[0..9] of TM; ... procedure(var X : Integer; Num : Integer); begin X := X + Num; end; ... GAVGAV(m[1].A, 5); |
#8
|
|||
|
|||
![]() Это разумеется. Не могу зайти по другой причине.
У меня есть процедура, которая сравнивает и сортирует N элементов с k-й позиции в массиве. Но теперь у меня массив из записей с кучей полей. Процедура должна проводить операции сравнения и сортировки для указанного поля, перемещая тем самым элементы массива. Если указывать номер ячейки массива, то получится жуткое усложнение программы, из-за особенностей процедуры, да и придется очень многое переделывать. Проще говоря было: Код:
if B[locB] < C[locC] then ... Код:
if B[locB].X < C[locC].X then ... |
#9
|
||||
|
||||
![]() Это не жуткое усложнение, это непродуманный алгоритм. Отсюда и все проблемы. Лучше пока не поздно, просчитать все варианты обращения к массиву и изменить сейчас, чем потом бороться с ветряными мельницами.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#10
|
|||
|
|||
![]() Как вариант - если все поля одинакового типа и расположены подряд, то можно извернуться так
Код:
type TM = record case boolean of true:( A:integer; B:integer; C:integer; ); false:(X:array[0..2] of integer;) end; |