Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » алгоритм расчета тасков с повторениями в календарях

Ответить
Настройки темы
алгоритм расчета тасков с повторениями в календарях

Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


ктонибыть может посоветовать: алгоритм расчета тасков с повторениями в календарях ?
я зык не выжен... важен сам алгоритм...

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 17:09, 19-05-2006

 

редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Что такое "таск с повторением в календаре"?

-------
http://ivank.ru


Отправлено: 20:33, 19-05-2006 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


ivank
календарь - тот что АУТЛУК, по другому ежедневник
такс - то что записывают в ежедневник...

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 21:22, 19-05-2006 | #3


Аватара для Arrest

runs with scissors


Сообщения: 642
Благодарности: 77

Профиль | Отправить PM | Цитировать


Это повторяющееся событие.

А что? Какие проблемы?

-------
- Why do you call this version of software 'beta'?
- Coz it's beta than nothing.


Отправлено: 12:17, 20-05-2006 | #4


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


Arrest
аы можете предложить такой алгоритм?
скажем есть задача повторяющаяся каждый дет по три раза...
и вот запрашивается эта таска через год после создания...

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 20:14, 20-05-2006 | #5


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Vlad Drakula
А в чём проблема? Я до сих пор не могу понять.

Можно хранить для каждого задания набор событий (лучше даже логическое выражение из этих событий), при котором оно наступает. (Т.е. в данном случае "каждый день" И (время1 ИЛИ время2 ИЛИ время3)). А потом просто проверять выполняются эти события для текущего дня или нет.

-------
http://ivank.ru


Отправлено: 15:00, 21-05-2006 | #6


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


ivank
так ты можешь привести пример алгоритма, а не туманное его описание?

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 11:10, 22-05-2006 | #7


Аватара для Arrest

runs with scissors


Сообщения: 642
Благодарности: 77

Профиль | Отправить 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


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


Arrest
а где здесь:
Цитата:
алгоритм расчета тасков с повторениями

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 15:48, 22-05-2006 | #9


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить 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% случаев она покроет, я полагаю.

-------
http://ivank.ru


Отправлено: 20:33, 24-05-2006 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » алгоритм расчета тасков с повторениями в календарях

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Офис и Текст - 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




 
Переход