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

Вниз

Подскажите функцию сравнения двух указателей на real   Найти похожие ветки 

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

Привет всем! Подскажите функцию сравнения двух указателей на 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-25 18:02) [1]

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

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

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


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

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


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

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:57) [4]

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


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

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


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


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 17:09) [7]

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

Это не то :-)


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

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


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

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



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

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

Наверх




Память: 0.48 MB
Время: 0.016 c
3-13929
NEV
2002-08-15 14:07
2002.09.05
Лимит на выполнение запроса в ADO


3-13922
atikiN
2002-08-14 11:25
2002.09.05
Ошибка


1-13996
Hollander
2002-08-25 04:29
2002.09.05
Edit проблема с пробелами


1-14163
3asys
2002-08-25 14:40
2002.09.05
Как получить коорднаты выделенного фрагмента в TWebBrowser?


3-13926
bobr12
2002-08-15 12:32
2002.09.05
Как поставить на машину BDE?