Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

Работа с указателями   Найти похожие ветки 

 
Frozzen   (2004-11-18 22:22) [0]

Подскажите пожайлусто.

function CompareItems(Item1, Item2: Pointer): Integer;
var a, b : TSide;
begin
 a := Item1;
 b := Item2;
 if a.p = b.p then Result := 0 else
 if a.p > b.p then Result := 1 else

Как нибуть можно иначе, наподобе (Items1 as TSide).p
Или только так a := Item1; и ...


 
Defunct ©   (2004-11-18 22:36) [1]

TSide(Item1).P


 
Frozzen   (2004-11-18 22:38) [2]

спасибо


 
Гаврила ©   (2004-11-18 23:01) [3]

Result:=TSide(Item1).P - TSide(Item2).P;

%-)))


 
GuAV ©   (2004-11-18 23:03) [4]

Гаврила ©   (18.11.04 23:01) [3]
Result:=TSide(Item1).P - TSide(Item2).P;


Ха, а если P - стока ? или Int64 ? :-)


 
Defunct ©   (2004-11-18 23:06) [5]

> Ха, а если P - стока ? или Int64 ? :-)

Result := Integer( TSide(Item1).P > TSide(Item2).P );


 
GuAV ©   (2004-11-18 23:12) [6]

Defunct ©   (18.11.04 23:06) [5]
Result := Integer( TSide(Item1).P > TSide(Item2).P );


Это Вы по-злому :->


 
Игорь Шевченко ©   (2004-11-18 23:12) [7]

Вы б хоть код читали...


 
GuAV ©   (2004-11-18 23:15) [8]

Игорь Шевченко ©   (18.11.04 23:12) [7]
Вы б хоть код читали...


Вы про телепатию Гаврилы ? Или про что ?


 
Игорь Шевченко ©   (2004-11-18 23:27) [9]

GuAV ©   (18.11.04 23:15) [8]

Я про [3] а в особенности про [5]


 
GuAV ©   (2004-11-19 00:04) [10]

Ну так
if a.p = b.p then Result := 0 else
if a.p > b.p then Result := 1 else
...
догадываемся телепатически
что эта функция должна возвращать положительное значение если  TSide(Item1).P > TSide(Item2).P,
нуль если = и отрицательное если <.
(возможно это для сортировки, например LV). Предполагаем что P - Integer это [3]


 
Defunct ©   (2004-11-19 01:14) [11]

> особенности про [5]

домысливать логику функции я не стал.
то что в [5] покрывает, то что написано в вопросе.

С домыслами GuAV [10]

Result := Integer( TSide(Item1).P > TSide(Item2).P );
Result := Result - Integer( TSide(Item1).P < TSide(Item2).P );


 
Игорь Шевченко ©   (2004-11-19 01:28) [12]

Defunct ©   (19.11.04 01:14) [11]


> Result := Integer( TSide(Item1).P > TSide(Item2).P );
> Result := Result - Integer( TSide(Item1).P < TSide(Item2).P
> );


Сравни по ясности с

 if TSide(Item1).P > TSide(Item2).P then
   Result := 1
 else if TSide(Item1).P < TSide(Item2).P then
   Result := -1
 else
   Result := 0;


Как ты думаешь, сколько времени потребуется программисту (вне зависимости от квалификации), чтобы понять, что оба фрагмента кода выполняют одно и то же ?
К тому же второй код выполняется быстрее.


 
Defunct ©   (2004-11-19 02:18) [13]

> Как ты думаешь, сколько времени потребуется программисту (вне зависимости от квалификации), чтобы понять, что оба фрагмента кода выполняют одно и то же ?


Не знаю, задача не имеет решения ;>


 
GuAV ©   (2004-11-19 02:44) [14]

Игорь Шевченко ©   (19.11.04 1:28) [12]
К тому же второй код выполняется быстрее.

И к тому же по F7 понятно что происходит :)


 
Defunct ©   (2004-11-19 02:47) [15]

> К тому же второй код выполняется быстрее.
> И к тому же по F7 понятно что происходит :)
К тому же если это функция защиты, то ее проще взломать ;)


 
VMcL ©   (2004-11-19 07:23) [16]

>>GuAV ©
>>Defunct ©

Хакеры доморощенные :-)


 
Игорь Шевченко ©   (2004-11-19 11:26) [17]

Defunct ©   (19.11.04 02:18) [13]

Задача имеет одно-единственное решение. Код должен быть ясный и понятный. Иногда в ущерб производительности, но всегда ясный и понятный программисту, вне зависимости от квалификации последнего.


 
Verg ©   (2004-11-19 12:21) [18]


if TSide(Item1).P = TSide(Item2).P then
  Result := 0
else
  Result := ord(TSide(Item1).P > TSide(Item2).P) * 2 - 1;


 
Sha ©   (2004-11-19 13:49) [19]

> Гаврила ©   (18.11.04 23:01) [3]
> Result:=TSide(Item1).P - TSide(Item2).P;

Этот код ошибочен для целых чисел
(в нем не учитывается возможность целочисленного переполнения)



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

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.051 c
8-1094407602
IRYS
2004-09-05 22:06
2004.12.05
Preview mode для ScreenSaver a


1-1100860387
TankMan
2004-11-19 13:33
2004.12.05
Как запускать с параметрами так это легко, а как возвращать...


9-1091792808
johndoe
2004-08-06 15:46
2004.12.05
DTMF на входе звуковухи


10-1069230228
РВА
2003-11-19 11:23
2004.12.05
Запуск приложения на клиенте


1-1100689264
Balkon
2004-11-17 14:01
2004.12.05
Совместный доступ двух потоков к объекту TQueue