![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
целое ли число
Evereve © (2005-09-27 18:21:00)Алгоритмический вопрос: как можно с помощью только операций +,-,*,/ узнать, является число целым или дробным?
Заранее спасибо
umbra (2005-09-28 20:11:00) [1]Главное - оптимизировать, т.е. операций поменьше. Если оптимизировать 8, то
получится
function IsFrac(Value: Single): LongBool;
Result := 1;
end;
vrem (2005-09-28 20:00:00) [2]да, что то я.. ещё способ придумал - результат:=результат or (все биты по очереди). Надо же - можно свой IF написать :)
begin...end (2005-09-28 19:57:00) [3]> vrem (28.09.05 19:52) [9]
> как сдвинуть в нужное место?
Зачем? Для LongBool любое ненулевое значение может рассматриваться как "истинное".
vrem (2005-09-28 19:52:00) [4][8] GuAV © (28.09.05 19:45)
результат = 1 бит как я понял, в определённом месте, перечисленными операциями можно получить этот бит, но в произвольном месте. как сдвинуть в нужное место?
допустим больше нуля для байта -
байт and 255 - какой то один или все 8 битов проявятся, но в любом из 8-ми мест, а нужно - в 0-вом месте, что бы в результат скопировать. и как? :)
GuAV (2005-09-28 19:45:00) [5]Можно и без сравнения :-)
function IsFrac(Value: Single): LongBool;
var
_Value: LonwWord absolute Value;
_Result: LongWord absolute Result;
begin
// тут можно обойтись and or not xor shl shr :=, если знать формат single, мне в лом искать ;)
end;
GuAV (2005-09-28 19:21:00) [6]Grief © (28.09.05 16:23) [5]
Не обязательно, можно обойтись сложением и сравнением.
vrem (2005-09-28 18:04:00) [7]Интерактивную программу написать, что бы пользователю вопросы задавала. Раз сама не решает - не будет задаваться.
Grief (2005-09-28 16:23:00) [8]Используя тока плюс, минус, умножить и делить - низзя, ибо всем эти операторам глубоко поровну целые или дробные операнды. Можно только обойтись без знака равенства. А вот Int() или Trunc() или еще что-нить подобное обязательно должно быть.
MBo (2005-09-28 15:34:00) [9]Для того, чтобы это узнать, нужно посмотреть, как объявлена переменная в разделе Var.
IceBeerg (2005-09-28 13:36:00) [10]
var
int1:Real;
begin
int1:=12.0;
If int1<>Trunc(Int1) Then Application.MessageBox('Число не целое','Msg',0)
Else Application.MessageBox('Число целое','Msg',0);
end;
Anatoly Podgoretsky (2005-09-27 19:36:00) [11]Никак - для того чтобы узнать нужны операторый отношений.
XGarik (2005-09-27 19:16:00) [12]Алгоритма не знаю (есть ли он такой вообще?). Но направлю к свету. Мы имеем одно число. Над этим числом мы производим различные действия и в итоге получаем какую-нибудь константу, которая и будет ключем к раскрытию загадки!
Допустим:
{танцы с бубнами и числом}=0.1 - целое
{танцы с бубнами и числом}<>0.1 - дробное
А вообще для чего это? Задание по матану? Или еще что?