Выбор оптимального алгоритма для определения дня недели по дате
Зарегистрируйся в два клика и получи неограниченный доступ к материалам,а также промокод на новый заказ в Автор24. Это бесплатно.
Раньше, когда под рукой отсутствовал календарь, для того чтобы определить, какой сегодня день недели, необходимо было использовать довольно громоздкие таблицы, в которых без инструкции сложно разобраться. Теперь же существует множество алгоритмов, благодаря которым достаточно просто узнать день недели по любой дате.
Наиболее известные из них:
Алгоритм определения дня недели при помощи суммы смещений:
Нужно взять смещение (день недели) первого дня года (у) и смещение месяца (m). Затем вычислить сумму y+m+d, где d – день месяца. После этого следует найти остаток от деления на 7. В результате получаем день недели.
При этом смещение для месяца берётся для календаря некоторого года и равно количеству серых квадратов в начале месяца .
Смещение для года можно вычислить через сумму смещения ближайшего меньшего високосного года и его разницы с искомым годом. На самом деле, это крайне непростая операция, так как не существует одной обобщённой формулы для всех лет.
Также следует отметить, что у программистов часто встречается проблема с потерянной единицей при реализации алгоритмов. Данный алгоритм не является исключением, так как для января и февраля високосного года обобщенная формула для нахождения дня недели по дате должна выглядеть следующим образом:
(y+m+d–1)%7, где % –это остаток от деления
Зарегистрируйся, чтобы продолжить изучение работы
. ( STYLEREF 1 \s 2. SEQ Формула \* ARABIC \s 1 1)
Недостатком данного способа является то, что он работает только для Григорианского календаря.
Алгоритм Целлера (Zeller):
Месяцы нумеруются от 3 (март) по 14 (февраль) (то есть март = 3, апрель = 4, май = 5, …, декабрь = 12, январь = 13, февраль = 14). Следовательно, год предполагается начать в марте, поэтому, например, январь 1995 года должен рассматриваться как 13-ый месяц 1994 года. Формула для Григорианского календаря:
w=(d+13m+15+y+ y4+ c4-2c), ( STYLEREF 1 \s 2. SEQ Формула \* ARABIC \s 1 2)
где
Y
–
это (год-1) за январь или февраль, и (год) за любой другой месяц;
y – это последние две цифры Y;
c – это первые две цифры Y;
d – это день месяца (от 1 до 31);
m – это «смещённый» месяц (март = 3, …, февраль = 14);
w – это день недели (0 = суббота, 1 = воскресенье, …, 6 = пятница).
Если же необходимо найти день недели даты Юлианского календаря, то следует использовать следующую формулу (обозначения аналогичны предыдущей формулы):
w=d+13m+15+y+ y4+ 5-c.
( STYLEREF 1 \s 2
50% курсовой работы недоступно для прочтения
Закажи написание курсовой работы по выбранной теме всего за пару кликов. Персональная работа в кратчайшее время!