Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];

Вниз

Подскажите функцию сравнения двух указателей на 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
3-13896
Igor_thief
2002-08-14 15:26
2002.09.05
Файл с расширением VAL


4-14336
antonyo
2002-07-05 11:06
2002.09.05
Человеки!!!Дайте адресок где можно скачать исходые тексты на API


3-13925
sdram
2002-08-15 14:32
2002.09.05
Почему нельзя изменить размер массива


6-14200
olookin
2002-06-30 12:17
2002.09.05
Удаленные машины


1-14078
***
2002-08-27 10:33
2002.09.05
InstallShield





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский