| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Вычисление дня недели |
| Автор: NiJazz 16.11.2003, 13:14 |
| Нужно решить задачу, не используя стандартных типов вроде TDateTime... Задача выглядит так: "Для заданной даты вычислить день недели". |
| Автор: Vit 16.11.2003, 14:59 |
| Надо читать правила построения Григорианского календаря, когда там эти високосные годы и т.п., а затем чистая арифметика. |
| Автор: NiJazz 16.11.2003, 18:57 |
| Vit, а где это взять |
| Автор: Kurt 16.11.2003, 21:11 |
| Во! Рекомендую! Подходит для любого ЯП! Рассказываю алгоритм.. Пусть n - день недели (n=0 - воскресение, n=1 - понедельник и т.д n=6 - суббота) d - число месяца(дата); m - номер месяца, если начинать счет с марта: 1 - март, 2 - апрель,.. 12 - февраль.(такая нумерация - для устранения проблем с февралем - то 28 то 29 дней..). y - номер года в столетии; c - количество столетий с учетом того, что январь считается 11-м, а февраль - 12-м месяцем предыдущего года). Т.е для, допустим, 2000г., то для даты на январь-февраль, считаем y=99, c=19, для других месяцев y=0, c=20. Далее вычисляем число W: W = d+[(13*m-1)/5]+y+[y/4]+[c/4]-2*c [] - целая часть от числа (например, [3.14]=3, [-3.14]=-4) Теперь n = остаток от деления на 7 числа W. Все. Как интерпретировать n я описал. Если W отрицательно, то остаток от деления на 7 все равно должен быть >= 0. Например, W=-25=7*(-4)+3. Пеэтому n=3 - среда. Алгоритм точно работает для ЛЮБОЙ даты н.э. (проверено!). Как ДО Н. Э. - честно говоря, не знаю, не пробовал. Enjoy it! |
| Автор: NiJazz 17.11.2003, 00:27 | ||
Kurt, спасибо. Пока не смотрел, но выложу готовый свой вариант...
|
| Автор: NiJazz 17.11.2003, 00:28 |
| С русским не продумал... Но ничего, и так ясно... |
| Автор: December 17.11.2003, 01:27 |
| В "Алгоритмы" обсуждалось недавно. |