реклама на сайте
подробности

 
 
> Алгоритм нахождения праздничной даты.
Jenya7
сообщение Feb 1 2015, 07:38
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Есть RTC.
Код
struct sRTC
{
    uint8_t rtcYear;
    uint8_t rtcMonth;
    uint8_t rtcDay;
    uint8_t rtcDayOfWeek;
    uint8_t rtcHour;
    uint8_t rtcMin;
    uint8_t rtcSec;

};

extern struct sRTC rtc;

Инициализирую
Код
rtc.rtcYear = 2015;
rtc.rtcMonth = 1;
rtc.rtcDay = 29;
rtc.rtcDayOfWeek = 5;
rtc.rtcHour = 12;
rtc.rtcMin = 30;
rtc.rtcSec = 10;


Нужно послать сигнал когда праздник подошел . Скажем 9 Мая. Как это сделать? Думал забить таблицу праздников на 20 лет вперед и каждый час сравнивать текущую дату но подозреваю это не самое лучшее решение.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexeyv
сообщение Feb 2 2015, 04:35
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



А что если все праздники отсортировать и в момент перехода на новый день сравнивать только с одной датой - самой ближайшей. При наступлении этой даты - взводить счетчик на следующую ближайшую дату. Ну и раз в полгода добавлять в отсортированную таблицу следующие даты. И никаких переборов.
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Feb 2 2015, 08:23
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Цитата(alexeyv @ Feb 2 2015, 07:35) *
И никаких переборов.

Не понял, откуда берутся переборы?
Не проще ли создать массив uint32_t holidays[12], в котором, как предложил CrimsonPig, будут отмечены единичными битами праздники. В данном случае даже счетчик числа дней от начала года не нужен. По rtcMonth выбираем месяц из массива, по rtcDay выделяем нужный бит и проверяем его на равенство единице.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Feb 2 2015, 08:36
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Grizzzly @ Feb 2 2015, 14:23) *
Не понял, откуда берутся переборы?
Не проще ли создать массив uint32_t holidays[12], в котором, как предложил CrimsonPig, будут отмечены единичными битами праздники. В данном случае даже счетчик числа дней от начала года не нужен. По rtcMonth выбираем месяц из массива, по rtcDay выделяем нужный бит и проверяем его на равенство единице.

а почему 12 элементов? тогда нужен второй вектор - дни в месяце.

Цитата(nill @ Feb 2 2015, 12:11) *
На эти грабли уже наступали? Или это просто пример с потолка?

я потом делаю +/- 2000
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Алгоритм нахождения праздничной даты.   Feb 1 2015, 07:38
- - gerber   Можно отслеживать изменение дня, и в момент измене...   Feb 1 2015, 08:50
- - Jenya7   если пойти прямым путем то раз в сутки мне нужно п...   Feb 1 2015, 09:05
|- - CrimsonPig   Цитата(Jenya7 @ Feb 1 2015, 09:05) если п...   Feb 1 2015, 10:33
|- - Jenya7   Цитата(CrimsonPig @ Feb 1 2015, 16:33) Th...   Feb 1 2015, 11:15
|- - CrimsonPig   Цитата(Jenya7 @ Feb 1 2015, 11:15) мне ка...   Feb 1 2015, 11:23
|- - toweroff   Цитата(Jenya7 @ Feb 1 2015, 14:15) мне ну...   Feb 1 2015, 11:26
- - fider   Видимо можно и так, только с учетом високосного го...   Feb 1 2015, 09:07
|- - Grizzzly   Цитата(Jenya7 @ Feb 2 2015, 11:36) а поч...   Feb 2 2015, 08:42
- - nill   На эти грабли уже наступали? Или это просто пример...   Feb 2 2015, 06:11
- - adnega   Праздники не наступают каждые 10 мс. Поэтому если ...   Feb 2 2015, 09:13
- - WitFed   Мне кажется, что предложение alexeyv было самым сб...   Feb 2 2015, 13:34
- - SM   Вообще, храните время в формате unix time или подо...   Feb 3 2015, 09:28


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 11:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016