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

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

Подскажите функцию сравнения двух указателей на real [D6, Win2k]


Андрусь ©   (2002-08-25 14:38:00) 

Привет всем! Подскажите функцию сравнения двух указателей на real
из List.Короче говоря ф-ю Compare в List.Sort.Хотелось бы в одну строку и не делать так

Procedure Compare(Item1,Item2:pointer):integer;
var r1,r2:real;
Begin
r1:=Item1;r2:=Item2;
If r1^>r2^ Then Result:=1
Else if r1^<r2^ Result:=-1
Else Result:=0;
End;

Вот как для типа Integer

Result:=Integer(Item1)^-Integer(Item2)^;

Зараннее всем большое спасибо.


Игорь Шевченко   (2002-08-26 18:08:00) [1]

Сравнивает, но не то, что требуется автору :-)


Толик   (2002-08-26 17:53:00) [2]

to Игорь Шевченко © (26.08.02 17:09)
Как это не то?!? Чем же не сравнение??? Замечательно сравнивает!


Игорь Шевченко   (2002-08-26 17:09:00) [3]

Толик © (26.08.02 17:06)

Это не то :-)


Толик   (2002-08-26 17:06:00) [4]


Procedure Compare(Item1, Item2: pointer): integer;
var
Res: single;
begin
Res := single(Item1^) - single(Item2^);
//т.к. single и integer по 4 байта, то:
RESULT := integer((@Res)^);
end;


Ну не в одну строку, в две, но тоже вариант.


Игорь Шевченко   (2002-08-26 16:04:00) [5]

Нет, вы ошиблись.
Найдите 10 отличий :-)
Ваш код даже скомпилироваться не должен.
Для времени есть, кстати, тип TDateTime - рекомендую.
Или Integer, опять же, если нужно только время.
Боюсь, что одной строкой не получится...


Андрусь   (2002-08-26 13:57:00) [6]

>Игорь Шевченко ©
Так вы же написали тоже что и я. А я хотел в одну строку.Это не для координат(они integer),а для времени.


Игорь Шевченко   (2002-08-26 13:23:00) [7]

if Real(Item1^) > Real(Item2^) then
Result := 1
else if Real(Item1^) < Real(Item2^) then
Result := -1
else
Result := 0;

Все-таки, прислушайтесь к совету Юрия Зотова и Real замените на Double, хотя бы. А еще лучше для координат использовать целые числа.


Андрусь   (2002-08-26 13:20:00) [8]

Простите мастер,действительно написал и не подумал. Но я всё таки про вопрос.Ваше Result := Real(Item1^) - Real(Item2^); Не пойдёт,т.к.несоотв.типа real и integer.


Юрий Зотов   (2002-08-25 18:02:00) [9]

Result := Real(Item1^) - Real(Item2^);

Кстати, и для Integer то же самое, а не так, как у Вас.

Только вместо Real я бы посоветовал везде явно писать фактически используемый тип - single, double или extended. Так надежнее.


Наверх

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