Динамические эффекты

Предварительная подготовка

Эффекты форматирования

Графические объекты

Движение объектов

Ожившие графики

Другие варианты

Вентильные схемы

Автоматизация тестирования

Автоматизация оценки

Проект "Машина времени"

Игра "Жизнь"

Заполнение аттестатов

На главную

Проект «Машина времени»

Часть 1: Вечные календари без макросов

Часть 2: Дополнения к вечным календарям

Часть 3: Часы с цифровым интерфейсом

Часть 4: Часы с циферблатом и стрелками  

Часть 2

 

Калькулятор пересчета дат Осталось – прошло Было – будетПасха и переходящие даты

Калькулятор пересчета дат

Хорошо бы проверить надежность работы наших календарей на большой дистанции. Переместимся во времени к отправной точке наших календарей – 1-ому году нашей эры. Да… Что-то неладно! По григорианскому календарю 1 января пришлось на понедельник, а по юлианскому – на субботу. Результат, скажем прямо, неожиданный. Ведь должны же совпадать календари хотя бы в начале. Значит, где то нами допущена ошибка? Не будем торопиться с выводами.

Существуют формулы для пересчета дат григорианского календаря в юлианский и наоборот. Их можно найти в Интернете, например, по адресу http://www.astronet.ru/db/msg/1182321/node4.html. Воспользуемся ими для создания еще одной, ранее заявленной части нашего проекта, калькулятора для пересчета любых дат.

После тщательного перевода формул в формат MS Excel, оптимизации ввода и преобразования результатов к удобному для восприятия виду можно получить примерно такой облик нашего «навигационного прибора».

Рис. 6. Калькулятор пересчета дат.

Здесь многие формулы для промежуточных вычислений пришлось скрыть с целью обеспечения приличного дизайна, так что если вы воспользуетесь готовым проектом, то для обнаружения ячеек, работающих в «подполье», попробуйте выделить весь лист. А для вскрытия связей между ними отобразите панель «Зависимости» и, выделяя ячейки с входными и выходными данными, пощелкайте по кнопкам «Влияющие ячейки» и «Зависимые ячейки». У вас должно получиться следующее.

Рис. 7. То же, но с отображением зависимостей и скрытых данных.

Введя дату 1 января 1 года, получаем, что этому дню григорианского календаря соответствует 3 января по юлианскому календарю. Результат пока непонятный, но в юлианском календаре на этот год действительно на 3 января приходится понедельник, как это было у нас в григорианском календаре. Попробуем разобраться, в чем дело.

Если помните, 400 григорианских лет ровно на трое суток короче такого же количества юлианских. В 2000 лет содержится 5 раз по 400, значит, разница между юлианским и григорианским календарем должна составлять 3 * 5 = 15 дней. Фактически же в наше время григорианский календарь опережает юлианский только на 13. Дело в том, что основным днем для расчета Пасхи является день весеннего равноденствия. За время полного периода повторяемости дат этого праздника равноденствие перекочевало с 19 марта в 1-ом году н.э. на 23 марта в 532-ом году. В григорианском календаре день весеннего равноденствия приходится на одну и ту же дату. В качестве такой даты при введении нового календаря папой Григорием XIII в 1582 г. решено было выбрать среднее значение первого пасхального периода, т.е. 21 марта. Основным аргументом такого решения явилось то, что, как было известно из документальных источников, во время исторического Первого вселенского Никейского собора христианской церкви в 325 г. день весеннего равноденствия приходился на 21 марта. Это было удобно еще по одной причине: величина смещения в этом случае для того времени составляла 10 суток.

Так что фактически время совпадения календарей приходится не на I, а на III век, точнее, на даты от 1 марта 200 года до 28 февраля 300 года. В этом можно убедиться, если ввести в созданные нами построители календарей даты из этого диапазона. Значит, полученные нами ранее результаты не свидетельствуют об ошибках, а, наоборот, подтверждают правильность наших построений.

Осталось – прошло

Каждому из нас приходилось считать, сколько дней осталось до или прошло после определенной даты. Обычно такая задача не вызывает особых затруднений, когда речь идет о расчетах в пределах месяца, но, чем дальше отстоят даты от текущего момента, тем затруднительнее становятся вычисления. Для их облегчения в электронных таблицах есть даже функция ДНЕЙ360. Но ее практическая применимость вызывает большие сомнения, так как принципы, заложенные в ее основу, не позволяют получить точный результат даже на интервалах, превосходящих один месяц. Тем не менее, система счета времени, принятая в MS Excel, дает возможность получить необходимые данные простым вычитанием дат, если они попадают в промежуток от 1 января 1900 года до 31 декабря 9999 года. Например, чтобы узнать, сколько дней осталось до открытия зимней олимпиады в Сочи, достаточно воспользоваться формулой =ДАТА(2014;2;7)-СЕГОДНЯ().

А если даты лежат за указанными пределами? Вспомним наш опыт преодоления преград с использованием периодичности григорианского календаря. Он выручит нас и в этом случае. Если даты отстоят друг от друга больше чем на период, то можно найти разницу между соответствующими им датами в базовом периоде (мы выбрали от 2000 до 2399 года) и прибавить количество дней в периоде, умноженное на число периодов между ними.

Формулу для вычисления года в базовом периоде, соответствующего данному, позаимствуем из нашего проекта григорианского календаря (ячейка D7). Не трудно посчитать, что число дней в григорианском периоде составляет 146097. Тогда число дней до нужной даты можно вычислить по формуле:

=ДАТА(U19;R19;M19)-СЕГОДНЯ()+ЦЕЛОЕ((S19-U19)/400+ЕСЛИ(S19<0;1;0))*146097

Здесь S19, R19, M19 – адреса ячеек, содержащих год, месяц и день интересуемой даты, а U19 – адрес ячейки, где вычисляется искомый год в базовом периоде. Интерфейс калькулятора числа дней до даты можно сделать примерно таким.

Рис. 8. Пример оформления модуля «Осталось-прошло».

Было – будет

Актуальной для наших путешествий во времени является и обратная только что рассмотренной задача определения даты, отстоящей от текущей на заданное число суток.

Для ее решения сначала по формуле =СЕГОДНЯ()+ОСТАТ(P29;146097) найдем дату в базовом периоде, которая позволит нам определить день и месяц интересующей нас даты. Здесь P29 – адрес ячейки ввода количества дней до этой даты.

Затем вычисляем год даты на основе формулы =ГОД(M29)+400*ЦЕЛОЕ(P29/146097), в которой M29 – адрес ячейки с предыдущей формулой. Вариант оформления решения на следующем рисунке.

Рис. 9. Пример оформления модуля «Было-будет».

Пасха и переходящие даты

Наш проект машины времени только выиграет, если будет содержать модуль для расчета так называемых переходящих дат календаря. Вам сразу станет понятно, о чем идет речь, как только я скажу, что основной из них является дата Пасхи, которой в разные годы соответствуют разные дни календаря. Другие переходящие даты связаны с этим днем и предшествуют Пасхе или отмечаются после нее через определенное число суток.

Формулы для расчета даты Пасхи можно найти в Интернете, в том числе на уже указанной ранее странице портала Астронет. Расчет непосредственно не связан с представлением и функциями даты-времени в Microsoft Excel, которые используются только на этапе вывода результата, поэтому описание этой части проекта мы опускаем и доверяем выполнить самостоятельно пытливому читателю, пожелав ему терпения, аккуратности и внимания. Для пересчета дат из григорианского календаря в юлианский и обратно пригодится ранее выполненный модуль. Результаты своей работы можно оформить, например, так, как на рисунке 10.

Рис. 10. Пример оформления модуля «Пасха».

Для вычисления остальных переходящих дат необходимо определить их смещение относительно Пасхи. Сделать это можно на основе какого-либо православного календаря, например, обратившись по адресу http://www.abc-people.com/event/crush.php, и формулой расчета количества дней между двумя датами одного года:

=ДАТА(;месяц1;день1)-ДАТА(;месяц2;день2)

Прибавив соответствующие смещения к вычисленной дате Пасхи, найдем искомые дни в календаре на интересующий нас год. Вывод можно организовать с помощью форматирования ячеек или функций СЦЕПИТЬ и ВЫБОР.

Рис. 11. Модуль «Переходящие даты».

Попробуем на нашей «машине времени» перенестись в будущее на 10000 лет. К этому времени разница между юлианским и григорианским календарем составит 88 дней, православная масленица в 12010 году придется на даты с 17 по 23 мая, а Пасха должна отмечаться 11 июля по григорианскому календарю. Полагаю, что этот прогноз вряд ли сбудется, но он соответствует нашим современным представлениям и общепринятым правилам календарных исчислений.

Продолжение

На верх

 

Динамические эффекты Предварительная подготовка Эффекты форматирования Графические объекты
&Движение объектов Ожившие графики Другие варианты Вентильные схемы Автоматизация тестирования
Автоматизация оценки Проект "Машина времени" Игра "Жизнь" Заполнение аттестатов

© 2009 Государственное областное образовательное учреждение
"Россошанская школа-интернат для детей-сирот и детей, оставшихся без попечения родителей"