Главная страница
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.017 c
3-13888
Sirus
2002-08-13 06:55
2002.09.05
Что означает


1-14119
id_privin
2002-08-23 11:36
2002.09.05
Sender is not! TButton


6-14198
Zensor
2002-06-29 08:03
2002.09.05
Помогите пожалуста написать программу типа ХупурТерминала.


1-14047
Wild Sam
2002-08-22 18:53
2002.09.05
Друзья! При вызове метода Open TExcelApplication.Workbooks вы-


3-13945
Vlad2
2002-08-16 06:49
2002.09.05
Проектирование БД