Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2015, 13:34   #1
downgrade
Новичок
Джуниор
 
Регистрация: 11.01.2015
Сообщений: 3
По умолчанию Находится ли время в указанном промежутке

Вроде и задача простая, но что-то я запутался. Есть промежуток времени, заданный в часах, например 17 и 6. Нужно определить, находится ли текущее время в этом промежутке, т.е. 23 находится, а 8 не находится.
Запутался в том, что первое и последнее значения могут быть любыми и простое сравнение на <> не проходит
downgrade вне форума Ответить с цитированием
Старый 11.01.2015, 14:15   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Сначала сделать еще одно сравнение - если левая граница (a) меньше правой (c), то вернуть результат выражения a <= b <= c, иначе "не (c <= b <= a)".
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 11.01.2015 в 14:21.
BDA вне форума Ответить с цитированием
Старый 11.01.2015, 15:31   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от BDA
Сначала сделать еще одно сравнение - если левая граница (a) меньше правой (c)
имхо, не покатит...

Цитата:
Сообщение от downgrade
например 17 и 6.
имеется в виду 17 часов одного дня, а 6 часов - следующего дня?!
Трудность только одна - как Вы определите, какое время относится к одной дате, а какое - к следующей?
Если, например, первое число - это всегда МЕНЬШЕЕ время (левая граница), а второе число - всегда БОЛЬШОЕ время (правая граница) и, ВАЖНО, разница во времени всегда МЕНЬШЕ 24 часов (одних суток), тогда задача имеет решение, иначе входных данных недостаточно для решения задачи.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.01.2015, 15:42   #4
downgrade
Новичок
Джуниор
 
Регистрация: 11.01.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
имхо, не покатит...


имеется в виду 17 часов одного дня, а 6 часов - следующего дня?!
Трудность только одна - как Вы определите, какое время относится к одной дате, а какое - к следующей?
Если, например, первое число - это всегда МЕНЬШЕЕ время (левая граница), а второе число - всегда БОЛЬШОЕ время (правая граница) и, ВАЖНО, разница во времени всегда МЕНЬШЕ 24 часов (одних суток), тогда задача имеет решение, иначе входных данных недостаточно для решения задачи.
Входных данных должно хватать, т.к. имеется в виду только число часов независимо от суток, таким образом левая часть в абсолютном значении всегда будет меньше. Вот здесь я и запутался, как различать (от 17 до 6) с (от 6 до 17)
downgrade вне форума Ответить с цитированием
Старый 11.01.2015, 15:49   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если С<A то к С прибавить 24. Если B<A то к B прибавить 24. Дальше сравнение A<=B<=C
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.01.2015, 15:59   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Аватар, уверены?

дано 15-00 и 17-00
8-00 входит в данный интервал?
ваш алгоритм нормально отработает?


p.s. на мой взгляд, не зная конкретики (к каким датам относятся заданные часы) задачу решить нельзя.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.01.2015, 16:07   #7
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
дано 15-00 и 17-00
Все нормально будет, если добавить проверку второго предела не принадлежность к следующим суткам, т.е. если второй предел меньше первого - значит это час уже следующих суток, а значит расстояние до него будет равно 24-первый предел + второй предел!
kta87 вне форума Ответить с цитированием
Старый 11.01.2015, 16:07   #8
downgrade
Новичок
Джуниор
 
Регистрация: 11.01.2015
Сообщений: 3
По умолчанию

Аватар, Спасибо, помогло. Решение как всегда оказалось проще. Наверно я просто устал
downgrade вне форума Ответить с цитированием
Старый 11.01.2015, 16:07   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

15 и 17 можно рассматривать только как одни сутки, по другому задача не имеет решения. 8 не входит в тот интервал. А вот 22 и 5 как в разных сутках. А вообще по хорошему времени мало - нужна и дата
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.01.2015, 16:12   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Serge_Bliznykov, да вроде нормально.
Вот есть циферблат. Если заданы числа a и с и выполнено неравенство a < с, то проверять нужно (a <= b и b <= c). Если a > c, то есть переход через 0 часов, но этот кусок пирога можно выразить через отрицание и прийти к первому случаю, но с поменявшимися местами пределами.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 11.01.2015 в 16:15.
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод записей в промежутке Nenado SQL, базы данных 6 25.01.2013 00:30
x на промежутке... NohnaimeR Помощь студентам 2 08.06.2011 15:41
random(На промежутке [-40;20])+array TheCross94 Помощь студентам 8 18.10.2010 19:26
Генерация даты в заданном промежутке zver777 Общие вопросы Delphi 6 09.04.2010 09:33
Выборка записей в промежутке нескольких минут ssdm SQL, базы данных 4 29.01.2010 15:47