|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » алгоритм расчета тасков с повторениями в календарях |
|
алгоритм расчета тасков с повторениями в календарях
|
Ночной странник Сообщения: 4050 |
ктонибыть может посоветовать: алгоритм расчета тасков с повторениями в календарях ?
я зык не выжен... важен сам алгоритм... |
|
------- Отправлено: 17:09, 19-05-2006 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать Что такое "таск с повторением в календаре"?
|
------- Отправлено: 20:33, 19-05-2006 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать ivank
календарь - тот что АУТЛУК, по другому ежедневник такс - то что записывают в ежедневник... |
------- Отправлено: 21:22, 19-05-2006 | #3 |
runs with scissors Сообщения: 642
|
Профиль | Отправить PM | Цитировать Это повторяющееся событие.
А что? Какие проблемы? |
------- Отправлено: 12:17, 20-05-2006 | #4 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать Arrest
аы можете предложить такой алгоритм? скажем есть задача повторяющаяся каждый дет по три раза... и вот запрашивается эта таска через год после создания... |
|
------- Отправлено: 20:14, 20-05-2006 | #5 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать Vlad Drakula
А в чём проблема? Я до сих пор не могу понять. Можно хранить для каждого задания набор событий (лучше даже логическое выражение из этих событий), при котором оно наступает. (Т.е. в данном случае "каждый день" И (время1 ИЛИ время2 ИЛИ время3)). А потом просто проверять выполняются эти события для текущего дня или нет. |
------- Отправлено: 15:00, 21-05-2006 | #6 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать ivank
так ты можешь привести пример алгоритма, а не туманное его описание? |
------- Отправлено: 11:10, 22-05-2006 | #7 |
runs with scissors Сообщения: 642
|
Профиль | Отправить PM | Цитировать C++:
#include <dos.h> typedef struct{ time* evrt; //Время наступления }event; int main(){ event times[3]; ... //Начало программы и запись данных в times; time* j; int q; bool stop=false; ...//Цикл проверки while(1){ while(!stop){ gettime(j); for(q=0; q<3; q++)if((j->ti_min==times[q]->ti_min)&&(j->ti_sec==times[q]->ti_sec)&&(j->ti_hour==times[q])){stop=true;break} } } if(stop)/*Действия на события*/; } //Конец программы ![]() |
Отправлено: 14:56, 22-05-2006 | #8 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать Arrest
а где здесь: Цитата:
|
|
------- Отправлено: 15:48, 22-05-2006 | #9 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать Vlad Drakula
Всё зависит от того, какая конуретно нужна функциональность. Вот псевдокод на Питоне: def get_tasks_for_date(date): res = [] for task in tasks: if task.happens_at_date(date): res.extend(task.get_times_for_date(date)) #т.е. просто дописать в конец списка ещё один return res class Task: def happens_at_date(date): # Здесь идёт проверка. # Вычисляется некое выражение. # Если ежедневное событие - True всегда # Если еженедельное (напр, по понедельникам), то проверяется # понедельник ли дата. итд # Выражения могут быть весьма сложными (напр, проверять таски в другие дни итп) # Хранить их (выражения) можно либо как синтаксическое дерево, либо в виде # кода, который потом надо будет проинтерпретировать (благо во всех динамических # языках есть eval или его аналоги). def get_times_for_date(date): # Аналогичным образом определяем список времён, в которые выполняется задание ![]() В более простом случае (подозреваю, что таски хранятся в базе), можно завести, например, такие таблички: task: id title -- ещё чё-нить happens_at: id -> FK(task) year month day_of_month week day_of_week time SELECT DISTINCT id, title, time FROM task, happens_at WHERE task.id = happens_at.id AND year IN (0, $year) AND month IN (0, month) AND day_of_month IN (0, $day_of_month) AND week IN (0, $week) AND day_of_week IN(0, $day_of_week) ![]() Если событие наступает три раза в день, то у нас будет три соответствующих записи, у которых все поля кроме time будут = 0, а time будет указывать время (внутри дня). Если событие наступает каждый день месяца, то всё = 0 кроме day = 1. Если каждую неделю, то всё = 0, кроме day_of_week = нужному дню. Если два раза в неделю, то просто две разных записи. Сложнее с отсчётом от конца периода, но этого тоже можно добиться некоторыми извратами (проще всего добавить ещё полей). Примерно так. Эту структуру тоже можно усложнить. Но нафига? 95% случаев она покроет, я полагаю. |
------- Отправлено: 20:33, 24-05-2006 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Офис и Текст - Winplast - программа для расчета окон | Разработчик | Программное обеспечение Windows | 11 | 13-10-2009 15:50 | |
Любой язык - кто нибудь писал скриптик, для расчета количества папок на диске | pocient | Скриптовые языки администрирования Windows | 8 | 01-09-2009 13:04 | |
Нужна программа для расчета прочности железобетона | BGW | Программное обеспечение Windows | 8 | 26-01-2008 18:37 | |
Службы - Задача: централизованная раздача тасков для Планировщик задач по сети | Mertvii | Microsoft Windows NT/2000/2003 | 12 | 18-01-2008 11:55 | |
Алгоритм | pauluss | Программирование и базы данных | 1 | 06-10-2006 10:53 |
|