PDA

Просмотр полной версии : Алгоритм календаря



Mick
16.04.2012, 22:11
Нужен собственно алгоритм расчета календаря.
Например как в винде c 1980 по 2099 год.
Есть идея сварганить его для спека (вернее для Фени).

tiboh
16.04.2012, 22:21
http://www.zxpress.ru/article.php?id=1714
http://www.zxpress.ru/article.php?id=6498

Vadim
17.04.2012, 14:16
Есть другой алгоритм, попроще и работает как раз в указанном диапазоне дат. Алгоритм следующий:

1) Из текущей даты нам надо получить количество дней прошедших от 1 января 1900 года. (этот день выпал на пн.)
2) Полученное число разделить на 7 - получаем день недели.

Лас
17.04.2012, 14:33
Нужен собственно алгоритм расчета календаря.
Например как в винде c 1980 по 2099 год.
Есть идея сварганить его для спека (вернее для Фени).
Формул масса:
http://vkalendar.ru/tag/formula
http://vkalendar.ru/analiticheskie-vechnyie-kalendari-kalendarnyie-pravila-i-formulyi

Wlodek
18.04.2012, 08:43
У меня была программа календаря даже на МК-52. Именно с её помощью я узнал, что родился в четверг.

Vadim
18.04.2012, 10:52
У меня была программа календаря даже на МК-52
Помню её. В Технике Молодёжи её опубликовали. Набирал, запускал.

null_device
18.04.2012, 10:56
Mick, Стандартный алгоритм

Январь — это 1, декабрь — 12 месяц. Для определения сдвига используется следующая формула: a=(14-месяц) div 12 (a — вспомогательная величина). Затем определяются год и месяц с учётом поправки: y=год-a (год — увеличиваем на 1 от исходного). m=месяц+12·a-2.

После вспомогательных операций вычисляется сам день недели:
result=(7000+(день+y+y div 4-y div 100+y div 400+(31×m) div 12)) mod 7

Для юлианского календаря формула выглядит так:
result=(6998+(день+y+y div 4+(31×m) div 12)) mod 7

Результат — число от 0 до 6, где 0 — воскресенье, 1 — понедельник, 2 — вторник, 3 — среда, 4 — четверг, 5 — пятница, 6 — суббота.

http://ru.wikipedia.org/wiki/%C2%E5%F7%ED%FB%E9_%EA%E0%EB%E5%ED%E4%E0%F0%FC

Mick
18.04.2012, 18:16
Во пищи для размышления подкинули :v2_conf2:
Спасибо, буду разбираться теперь.

Destr
18.04.2012, 21:01
А кто-нибудь эту тестил?
http://zxpress.ru/book_articles.php?id=562
(ветер дует отсюда: http://zxpress.ru/book_articles.php?id=325)

null_device
18.04.2012, 21:34
Mick, есть такая книжка: 128 советов начинающему программисту (http://bookfi.org/dl/595594/f21f13). Там тоже есть примеры программы "вечный календарь" (описание всех вариантов, дано в конце книжки)..

Vadim
18.04.2012, 22:22
Процедура длинновата. В основном из-за процедур деления умножения. Есть и короче.

goblinish
27.04.2012, 07:38
может, и не актуально, писал раньше "вечный календарь" для себя. На семерке работает не очень уверенно, недавно обнаружил. в архиве - алгоритм и исходники.

GriV
29.04.2012, 23:59
Процедура длинновата. В основном из-за процедур деления умножения. Есть и короче.
Где есть? Где исходный код?

Vadim
02.05.2012, 08:34
Где есть? Где исходный код?
Есть, я давал в журнале Voyager то ли 3 или 4 выпуск.