![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите функцию сравнения двух указателей на 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. Так надежнее.