|
|
|
Алгоритм нахождения праздничной даты в C.
|
|||
|---|---|---|---|
|
#18+
Есть RTC. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Инициализирую Код: c# 1. 2. 3. 4. 5. 6. 7. Нужно послать сигнал когда праздник подошел . Скажем 9 Мая. Как это сделать? Думал забить таблицу праздников на 20 лет вперед и каждый час сравнивать текущую дату но подозреваю это не самое лучшее решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 10:42 |
|
||
|
Алгоритм нахождения праздничной даты в C.
|
|||
|---|---|---|---|
|
#18+
хочу уточнить. пишу под микроконтролер в С. важно быстродействие кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 10:45 |
|
||
|
Алгоритм нахождения праздничной даты в C.
|
|||
|---|---|---|---|
|
#18+
jenya7Думал забить таблицу праздников на 20 лет вперед Смотря что ты понимешь под праздниками. Например для определения 9 мая достаточно проверить день и месяц, есть случаи посложнее "Пасха празднуется в первое воскресенье после весеннего полнолуния" тут проще таблицу на 20 лет вперед. jenya7 и каждый час сравнивать текущую дату но подозреваю это не самое лучшее решение. А зачем каждый час? Раз в сутки достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 10:50 |
|
||
|
Алгоритм нахождения праздничной даты в C.
|
|||
|---|---|---|---|
|
#18+
Dima Tjenya7Думал забить таблицу праздников на 20 лет вперед Смотря что ты понимешь под праздниками. Например для определения 9 мая достаточно проверить день и месяц, есть случаи посложнее "Пасха празднуется в первое воскресенье после весеннего полнолуния" тут проще таблицу на 20 лет вперед. jenya7 и каждый час сравнивать текущую дату но подозреваю это не самое лучшее решение. А зачем каждый час? Раз в сутки достаточно. можно и раз в сутки. не хочется перебирать все даты в for loop. я думал про какой нибудь офсет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 11:07 |
|
||
|
Алгоритм нахождения праздничной даты в C.
|
|||
|---|---|---|---|
|
#18+
jenya7не хочется перебирать все даты в for loop. я думал про какой нибудь офсет. Не надо все перебирать. Храни в отсортированном массиве и ищи двоичным поиском Хотя 1-2 тысячи элементов раз в сутки можно тупо перебрать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 11:17 |
|
||
|
Алгоритм нахождения праздничной даты в C.
|
|||
|---|---|---|---|
|
#18+
Dima Tjenya7не хочется перебирать все даты в for loop. я думал про какой нибудь офсет. Не надо все перебирать. Храни в отсортированном массиве и ищи двоичным поиском Хотя 1-2 тысячи элементов раз в сутки можно тупо перебрать. то есть сделать из дат числа, забить в массив, отсортировать и раз в день находить дату бинарным поиском? можно попробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 11:33 |
|
||
|
Алгоритм нахождения праздничной даты в C.
|
|||
|---|---|---|---|
|
#18+
а что если так. взять первый праздник в году и от него отсчитывать дни. при старте системы посчитать где наша дата по отношению к первому празднику. и потом обрабатывать случаи. скажем прошло сто дней - значит второй праздник, 150 дней - третий праздник и.т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 11:42 |
|
||
|
Алгоритм нахождения праздничной даты в C.
|
|||
|---|---|---|---|
|
#18+
jenya7а что если так. взять первый праздник в году и от него отсчитывать дни. при старте системы посчитать где наша дата по отношению к первому празднику. и потом обрабатывать случаи. скажем прошло сто дней - значит второй праздник, 150 дней - третий праздник и.т.д. Есть гарантия что никто часы не переведет? jenya7то есть сделать из дат числа, забить в массив, отсортировать и раз в день находить дату бинарным поиском? можно попробовать. Зачем числа делать? Сделать массив стуктур sRTC и функцию сравнения двух стуктур на больше/меньше. Можно промежуточный вариант: последовательный массив месяцев, т.е. индекс массива = Год*12 + Месяц - Начало. Где "Начало" - константа, первый месяц списка. А в массиве месяцев указатель на массив празников этого месяца (День, Название праздника). Тогда первым шагом получаешь указатель на список праздников месяца, затем его перебираешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 16:38 |
|
||
|
Алгоритм нахождения праздничной даты в C.
|
|||
|---|---|---|---|
|
#18+
Dima Tjenya7а что если так. взять первый праздник в году и от него отсчитывать дни. при старте системы посчитать где наша дата по отношению к первому празднику. и потом обрабатывать случаи. скажем прошло сто дней - значит второй праздник, 150 дней - третий праздник и.т.д. Есть гарантия что никто часы не переведет? jenya7то есть сделать из дат числа, забить в массив, отсортировать и раз в день находить дату бинарным поиском? можно попробовать. Зачем числа делать? Сделать массив стуктур sRTC и функцию сравнения двух стуктур на больше/меньше. Можно промежуточный вариант: последовательный массив месяцев, т.е. индекс массива = Год*12 + Месяц - Начало. Где "Начало" - константа, первый месяц списка. А в массиве месяцев указатель на массив празников этого месяца (День, Название праздника). Тогда первым шагом получаешь указатель на список праздников месяца, затем его перебираешь. интересно. надо проверить. спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2015, 18:23 |
|
||
|
Алгоритм нахождения праздничной даты в C.
|
|||
|---|---|---|---|
|
#18+
jenya7, а зачем хранить день недели ? Это вычисляемый атрибут по году, месяцу и дню. Или вы не хотите тратить на это время и жертвуете памятью ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 01:47 |
|
||
|
Алгоритм нахождения праздничной даты в C.
|
|||
|---|---|---|---|
|
#18+
SashaMercuryjenya7, а зачем хранить день недели ? Это вычисляемый атрибут по году, месяцу и дню. Или вы не хотите тратить на это время и жертвуете памятью ? мне нужно минимизировать любые вычисления так как приборчик питается от батарейки. быстро порешал здачи и пошел спать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 11:36 |
|
||
|
Алгоритм нахождения праздничной даты в C.
|
|||
|---|---|---|---|
|
#18+
jenya7, можно попробовать так: 1 в эксель выписать все праздники с датами на 20 лет :) при этом вычислить вычисляемые типа Пасхи, повторить повторяемые 2. отсортировать по возростанию дат 3. вычислить разницу между соседними (типа сколько дней от этого праздника до следующего) в контроллере, просыпаясь каждый день увеличивать счетчик, сравнивать его со "сколько дней до следующего", если совпало: 1 отправить сигнал 2 обнулить счетчик 3 удалить с верхушки массива прошедший праздник Для расчета дня первого праздника и на случай замены батарейки сохранять и оригинальные даты Думаю это минимальные затраты батарейки всего пара операций в день ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 14:42 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38884006&tid=1341084]: |
0ms |
get settings: |
6ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 382ms |

| 0 / 0 |
