Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Andrey Sapozhnikov                   2:5020/400     28 Aug 2002  16:41:57
 To : Bulat Ziganshin
 Subject : Re: совпадение времени с пе  риодом
 -------------------------------------------------------------------------------- 
 
 Bulat Ziganshin wrote:
 
 > * Originally in RU.PERL
 > Приятного тебе дня и незабываемой ночи, Rostislav!
 > 
 > Monday August 26 2002, Rostislav Podgornyi writes to All:
 >  RP>   Имеем некий часовой пеpиод (с 23 до 7 часов):
 >  RP>   $begin=23; $end=7;
 > 
 >  RP>   Имеем текущее значение:
 >  RP>   $now=5;
 > 
 >  RP>   Как узнать входит ли $now в вышеуказанный пеpиод или нет? Что-то
 > 
 > $end+=24 if $end<$begin;
 > $now+=24 if $now<$begin;
 
 Hепереносимое решение предполагающее, что в сутках 24 часа. Соответственно
 работать на других планетах не сможет. (А также его нельзя будет использовать,
 скажем, для проверки на попадание в интервал заданый минутами каждого часа).
 
 Вот как эту задачу решил бы математик:
 
 # Функция возвращает положительное число при попадании в интервал,
 # 0 - при попадании на границу интервала, либо отрицательное -
 # вне интервала
 
 sub inside1 {
      my ($begin, $end, $now) = @_;
      ($begin - $now) * ($end - $now)  * ($begin - $end);
 }
 
 Либо, несколько более корректно, но решение требует перехвата
 ошибок:
 
 # То же, но генерирует исключение в случае совпадения $begin и
 # $end, т.е. при неопределенности решения
 
 sub inside1a {
      my ($begin, $end, $now) = @_;
      ($begin - $now) * ($end - $now)  / ($begin - $end);
 }
 
 А так бы решал эту задачу логик:
 
 # Для начала примем, какие границы интервала включительны, а
 # какие исключительны. Обычно работая с интервалами времени
 # принимают одну границу включительно, а вторую исключительно, дабы
 # следующие друг за другом интервалы не вызывали неоднозначности.
 # Примем, как наиболее прывычный, вариант при котором $begin задается
 # включительно, а $end - исключительно.
 
 # Возвращает true при попадании в интервал, false - при непопадании.
 # Совпадение $begin и $end трактуется как нулевой интервал.
 
 sub inside2 {
      my ($begin, $end, $now) = @_;
      $now < $begin xor $now < $end xor $end < $begin;
 }
 
 Андрей
 
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 совпадение времени с периодом   Rostislav Podgornyi   26 Aug 2002 19:05:41 
 Re: совпадение времени с периодом   Vladimir Podgorny   27 Aug 2002 11:45:02 
 Hа: совпадение времени с периодом   Alexander V. Gaiduk   27 Aug 2002 11:51:12 
 Re: совпадение вpемени с пеpиодом   Pinsk CSM   27 Aug 2002 11:39:25 
 совпадение времени с периодом   Andrew Sagulin   27 Aug 2002 18:06:55 
 совпадение времени с периодом   Sergey Smagin   27 Aug 2002 14:16:22 
 совпадение времени с периодом   Bulat Ziganshin   28 Aug 2002 00:07:24 
 Re: совпадение времени с пе риодом   Andrey Sapozhnikov   28 Aug 2002 15:00:24 
 совпадение времени с пе риодом   Bulat Ziganshin   28 Aug 2002 21:09:13 
 совпадение времени с периодом   Bulat Ziganshin   27 Aug 2002 22:29:21 
 Re: совпадение времени с пе риодом   Andrey Sapozhnikov   28 Aug 2002 16:41:57 
Архивное /ru.perl/5284cd3df169.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional