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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2016, 12:40   #1
Buddha Zen
 
Регистрация: 05.11.2016
Сообщений: 5
По умолчанию Диапазон времени для будильника

Добрый день, требуется например с 23:30 до 7:45 утра исполнять какое-либо действие, в остальное время другое. Т.е. время начала исполнения всегда больше времени окончания. Уперся в то что после 23 часов идёт 0 часов.
Buddha Zen вне форума Ответить с цитированием
Старый 05.11.2016, 14:19   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Не понятен контекст задачи... Я предлагаю активно использовать "условные операторы ветвления" (вот начало, а дальше по кругу; свой код пишешь после "определяемся с часами"):


18.jpg

Последний раз редактировалось ura_111; 05.11.2016 в 14:21.
ura_111 вне форума Ответить с цитированием
Старый 05.11.2016, 14:46   #3
Buddha Zen
 
Регистрация: 05.11.2016
Сообщений: 5
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Не понятен контекст задачи...
Вложение 84391
Задача например выставить флаг FLAG = 1 при наступлении 22 часов (отбросим минуты для упрощения) и выставить FLAG = 0 при наступлении 7 часов. При этом при запуске программы в 8 часов, она понимает что FLAG = 0 и при запуске в 23 часа (или в 5 часов) - понимает что FLAG = 1.
Buddha Zen вне форума Ответить с цитированием
Старый 05.11.2016, 15:51   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Если нужно, чтобы программа понимала что её включили в 8:00, значит нужно работать с системным временем...

Я не буду рассматривать интервал от 23:30 до 7:45 (это логическая ловушка, в которую ты хочешь чтобы я попал); лучше рассмотрю время от 0:00 до 24:00. Обрати внимание, что в рассмотренном интервале минуты постоянно повторяются, а часы - никогда. Значит можно ввести идентификатор, переменную равную:
Код:
  kaka= 60*час+мин
и соответственно для точек смены флага тоже можно рассчитать "kaku":
Код:
kaka= 60*7+45
kaka= 60*23+30
Этот параметр уникален и постоянно растёт - значит можно строить логику работы таймера (на простом сравнении):

18.jpg


p.s.: я особо не тестировал выпадание "FLAG", поэтому - хорошенько протестируй (рассмотри разное время входа в программу) и допиши бесконечный цикл while()... В принципе можешь предусмотреть и выход из программы...

Последний раз редактировалось ura_111; 05.11.2016 в 16:04.
ura_111 вне форума Ответить с цитированием
Старый 05.11.2016, 17:56   #5
Buddha Zen
 
Регистрация: 05.11.2016
Сообщений: 5
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Я не буду рассматривать интервал от 23:30 до 7:45 (это логическая ловушка, в которую ты хочешь чтобы я попал); лучше рассмотрю время от 0:00 до 24:00.
Для диапазона от 0:00 до 24:00 (начало меньше окончания) всё просто, так же обхожусь обычным if else - если >= "начало" и < "окончание". Вот второй вариант с началом больше окончания ставит в тупик ) Ладно, есть пара мыслей, надо пробовать. Просто думал возможно есть решение которое все используют)
Buddha Zen вне форума Ответить с цитированием
Старый 05.11.2016, 20:20   #6
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

А что мешает сделать так?

Код:
int get_flag(int hours, int minutes){
    if(hours< END_HOUR || (hours == END_HOUR && minutes<= END_MINUTE) || (hours == START_HOUR && minutes>=START_MINUTE) || hours > START_HOUR) 
         return 1;
    return 0;
}
a.k.a. Angelicos Phosphoros
Мой сайт

Последний раз редактировалось New man; 05.11.2016 в 20:43.
New man вне форума Ответить с цитированием
Старый 05.11.2016, 20:54   #7
Buddha Zen
 
Регистрация: 05.11.2016
Сообщений: 5
По умолчанию

Цитата:
Сообщение от New man Посмотреть сообщение
А что мешает сделать так?
Всё не ограничивается простым ИЛИ. Важно чтоб программа при включении сразу понимала в диапазоне она или вне его и т.д. Я ставлю флаг в 0 и 1 если в диапазоне и нет. Просто в моих вариантах некоторые проверки пересекаются с другими, либо не описывают какой-либо возникший момент и происходит внештатная ситуация.
Вцелом решение похоже нашел, но пока требуется расширенное тестирование варианта
Buddha Zen вне форума Ответить с цитированием
Старый 05.11.2016, 21:18   #8
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

По-моему, мой вариант все случаи покрывает.
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 07.11.2016, 22:03   #9
Buddha Zen
 
Регистрация: 05.11.2016
Сообщений: 5
По умолчанию

Цитата:
Сообщение от New man Посмотреть сообщение
По-моему, мой вариант все случаи покрывает.
Отчасти да, такой вариант я тоже использовал (t< END || t> START), но в обратной проверке нужно было проверять обратный условию диапазон и желательно с &&, чтоб устройство точно знало в каком из диапазонов оно находится. Получается что ИЛИ в первой проверке уже пересекается с И во второй.
Задача решена, я просто проверяю диапазон обратный от того что пересекает границу в 0 часов )
Buddha Zen вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эволюция рингтонов будильника min@y™ Свободное общение 20 10.05.2016 14:49
Мелодия будильника по умолчанию Damik Общие вопросы Delphi 1 10.05.2013 21:16
диапазон времени действия(сист дата+-14 дней) slavikus Помощь студентам 9 23.07.2011 09:45
как задать диапазон времени Dmitrys Microsoft Office Excel 3 11.02.2011 16:51
диапазон времени chekanoff БД в Delphi 34 02.03.2008 01:28