Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с указателями


Frozzen ©   (2004-11-18 22:22:00) 

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

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; и ...


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

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

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


Verg   (2004-11-19 12:21:00) [2]


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


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

Defunct ©   (19.11.04 02:18) [13]

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


VMcL   (2004-11-19 07:23:00) [4]

>> GuAV ©
>> Defunct ©

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


Defunct   (2004-11-19 02:47:00) [5]

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


GuAV   (2004-11-19 02:44:00) [6]

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

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


Defunct   (2004-11-19 02:18:00) [7]

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


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


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

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 01:14:00) [9]

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

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

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

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


GuAV   (2004-11-19 00:04:00) [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]


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

GuAV ©   (18.11.04 23:15) [8]

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


GuAV   (2004-11-18 23:15:00) [12]

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


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


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

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


GuAV   (2004-11-18 23:12:00) [14]

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


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


Defunct   (2004-11-18 23:06:00) [15]

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

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


GuAV   (2004-11-18 23:03:00) [16]

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


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


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

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

%-)))


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

спасибо


Defunct   (2004-11-18 22:36:00) [19]

TSide(Item1).P


Наверх

Титульная страница Поиск, карта сайта Написать письмо