Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];

Вниз

Универсальная переменная   Найти похожие ветки 

 
DDA ©   (2004-06-16 01:06) [0]

как бы мне сделать такую процедуру чтоб в параметрах можно было передавать любую переменую любого вида?
Возможноли это?


 
Gero ©   (2004-06-16 01:08) [1]

procedure a(const x);
begin

end;


 
GuAV ©   (2004-06-16 01:08) [2]

Procedure P1(var A);
Procedure P2(const A);


 
GuAV ©   (2004-06-16 01:09) [3]

Gero ©   (16.06.04 01:08) [1]
:) да, я торможу :)


 
DDA ©   (2004-06-16 01:34) [4]

вот теперь мне нужно эту переменную сбросить(обнулить,стереть,уничтожить,очистить)


 
GuAV ©   (2004-06-16 01:47) [5]


> сбросить(обнулить,стереть,уничтожить,очистить)

не зная что нельзя знать как.
зы - посмотри Variant types - может что надо.


 
Gero ©   (2004-06-16 01:49) [6]


> вот теперь мне нужно эту переменную сбросить(обнулить,стереть,уничтожить,очистить)

Какую переменную?


 
pasha_golub ©   (2004-06-16 06:11) [7]

Про обнуление это к IronHawk"y. :=)


 
y-soft ©   (2004-06-16 07:53) [8]

Есть еще распространенный способ - использование указателей на указатели


 
ПсихЪ   (2004-06-16 11:36) [9]

Мне подобное понадобилось при создании универсальной процедуры криптования record"ов. Я использовал такой приём:

procedure ProcName( var Data; Size : integer );
var
 i : integer;
begin
 for i := 0 to Size - 1 do
 begin
   TBytes(Data)[i] := {присваиваем что-нибудь байту c номером i}
 end;
end;


Вот пример простого шифрования произвольных record"ов:

procedure CryptData( var Data; Size : integer );
var
 i : integer;
begin
 for i := 0 to Size - 1 do
 begin
   TBytes(Data)[i] := TBytes(Data)[i] xor i;
 end;
end;

Вызывается так:

type
 RecordName1 = record
   r1 : integer;
   r2 : string[5];
 end;
 RecordName2 = record
   r1 : string[5];
   r2 : RecordName1;
 end;

var
 rn1 : RecordName1;
 rn2 : RecordName2;
begin
 rn1.r1 := 10;
 rn1.r2 := "niger";
 rn2.r1 := "niga";
 rn2.r2 := rn1;
 CryptData( rn1, SizeOf( RecordName1 ) );
 CryptData( rn2, SizeOf( rn2 ) );
end.

Вот.


 
Anatoly Podgoretsky ©   (2004-06-16 12:11) [10]

ПсихЪ   (16.06.04 11:36) [9]
Это не политкоректно


 
Igorek ©   (2004-06-16 14:49) [11]


> DDA ©   (16.06.04 01:06)  
> как бы мне сделать такую процедуру чтоб в параметрах можно
> было передавать любую переменую любого вида?
> Возможноли это?

Конечно возможно.


 
panov ©   (2004-06-16 14:52) [12]

function iif(isTrue: Boolean;aVar1,aVar2: Variant): Variant;
begin
 if isTrue then Result := aVar1 else Result := aVar2;
end;


 
Игорь Шевченко ©   (2004-06-16 14:59) [13]

panov ©   (16.06.04 14:52)

Сравни:

a := iif (true, 2, 1/0)

и

a = 1 ? 2 : 1/0;


 
panov ©   (2004-06-16 15:11) [14]

>Игорь Шевченко ©   (16.06.04 14:59) [13]
Сравни:

Не понял, что сравнить?


 
Игорь Шевченко ©   (2004-06-16 15:16) [15]

panov ©   (16.06.04 15:11)

Обычно функция iif позиционируется, как замена оператора ? : в C.
Ее отличие от оператора заключается в первую очередь в том, что все ее аргументы вычисляются перед вызовом функции, поэтому ее применение иногда может сопровождаться весьма интересными эффектами.


 
panov ©   (2004-06-16 15:19) [16]

Игорь Шевченко ©   (16.06.04 15:16) [15]
угу.
Проверил пример из Игорь Шевченко ©   (16.06.04 14:59) [13],

результат - 2
если вызвать a := iif (False, 2, 1/0) - Exception, как и предполагал-)


 
Anatoly Podgoretsky ©   (2004-06-16 15:29) [17]

Игорь Шевченко ©   (16.06.04 14:59) [13]
Сравни a := iif (true, 123, "abc")


 
Danilka ©   (2004-06-16 15:35) [18]

Кстати, в Д7, в модуле MathUtils (если не ошибаюсь) есть процедура IfThen, которая как-раз описывается как аналог оператора "?:", у нее точно также, аргументы вычисляются перед вызовом, или все-таки компилятор знает про нее и расписывает ее как конструкцию if .. then .. else ..?

Нет под рукой Д7, а интересно.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.038 c
14-1086871861
DeMoN-777(no password)
2004-06-10 16:51
2004.07.04
Как выступить в роли провайдера ?


14-1086097429
McSimm
2004-06-01 17:43
2004.07.04
Архивы форумов


1-1087794402
ilnarab
2004-06-21 09:06
2004.07.04
Вопрос по SelectDirectory


14-1087361051
Tornado
2004-06-16 08:44
2004.07.04
что случилось???


3-1086687978
Belkova
2004-06-08 13:46
2004.07.04
фокус ввода





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