Разработать процедуры определения количества дней от рождест-ва Христова
Модератор: Andy
Разработать процедуры определения количества дней от рождест-ва Христова по текущий день в формате DD/MM/YYYY (с учетом високосных лет).
Подскажите как это реальзивать.
Подскажите как это реальзивать.
- mc-black
- Сообщения: 250
- Зарегистрирован: 08 май 2008, 16:09
- Откуда: Россия, Нижний Новгород
- Контактная информация:
Неправильно сформулированная задача, т.к. переход с Юлианского на Грирорианский календарь был значительно позже Рождества Христова, а именно 4 октября 1582 года, но в России переход на новый стиль был осуществлен еще позже.
Распределение високосных годов
* Каждый год, номер которого кратен 4 — високосный.
* Однако, каждый год кратный 100 — не високосный.
* Однако, каждый год кратный 400 все же високосный — 1600, 2000 и т.д.
Эти правила дают среднюю продолжительность года равной 365,2425
Вам для решения этой задачи нужно уметь вычислять кратность 4-м, 100 и 400 и делать сравнительно простое вычисление. На ассемблере прочтите подробно описание целочисленного деления div и все сразу станет понятно.
Распределение високосных годов
* Каждый год, номер которого кратен 4 — високосный.
* Однако, каждый год кратный 100 — не високосный.
* Однако, каждый год кратный 400 все же високосный — 1600, 2000 и т.д.
Эти правила дают среднюю продолжительность года равной 365,2425
Вам для решения этой задачи нужно уметь вычислять кратность 4-м, 100 и 400 и делать сравнительно простое вычисление. На ассемблере прочтите подробно описание целочисленного деления div и все сразу станет понятно.
На заказ: VBA, Excel mc-black@yandex.ru
Задача поставлена не неправильно, а просто не полно. Надо, например, так: "Разработать процедуры определения количества дней от рождест-ва Христова по текущий день в формате DD/MM/YYYY, с учетом високосных лет и того, что в первой версии календаря их ещё не было, дату коррекции календаря взять инностранную."" писал(а):Неправильно сформулированная задача, т.к. переход с Юлианского на Грирорианский календарь был значительно позже Рождества Христова, а именно 4 октября 1582 года, но в России переход на новый стиль был осуществлен еще позже.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
- mc-black
- Сообщения: 250
- Зарегистрирован: 08 май 2008, 16:09
- Откуда: Россия, Нижний Новгород
- Контактная информация:
Пример для 20.10.2009:
=(2009-1)*365+2009\4-2009\100+2009\400+(31+(28+0)+31+30+31+30+31+31+30)+20=733641
Пояснения:
'\' обратная косая черта - результат деления нацело без остатка
в скобках подсчитываем количество дней для целых месяцев по массиву количества дней в каждом месяце - для февраля берем 28 дней.
20 - день DD
(28+0) - поскольку 2009 - не високосный, иначе (28+1).
(2009-1), т.к. первый год считать не следует, первый год не был високосным.
-------------------
P.S. Примерно так, разве что на пару дней я мог немного ошибиться - требует перепроверки.
=(2009-1)*365+2009\4-2009\100+2009\400+(31+(28+0)+31+30+31+30+31+31+30)+20=733641
Пояснения:
'\' обратная косая черта - результат деления нацело без остатка
в скобках подсчитываем количество дней для целых месяцев по массиву количества дней в каждом месяце - для февраля берем 28 дней.
20 - день DD
(28+0) - поскольку 2009 - не високосный, иначе (28+1).
(2009-1), т.к. первый год считать не следует, первый год не был високосным.
-------------------
P.S. Примерно так, разве что на пару дней я мог немного ошибиться - требует перепроверки.
На заказ: VBA, Excel mc-black@yandex.ru
Разве? Надо ведь с рождества. А это даже не в прошлом тысячелетии." писал(а):Пример для 20.10.2009:
2009*365+2009\4-2009\100+2009\400+(31+(28+0)+31+30+31+30+31+31+30) +20
Пояснения:
'\' обратная косая черта - результат деления нацело без остатка
в скобках подсчитываем количество дней для целых месяцев по массиву количества дней в каждом месяце - для февраля берем 28 дней.
20 - день DD
(28+0) - поскольку 2009 - не високосный.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
В библиотеке Object Pascal (модуль OpDate.pas) високосный год определялся как:mc-black писал(а): Распределение високосных годов
* Каждый год, номер которого кратен 4 — високосный.
* Однако, каждый год кратный 100 — не високосный.
* Однако, каждый год кратный 400 все же високосный — 1600, 2000 и т.д.
Эти правила дают среднюю продолжительность года равной 365,2425
Код: Выделить всё
function IsLeapYear(Year : Integer) : Boolean;
{-Return True if Year is a leap year}
begin
IsLeapYear :=
(Year mod 4 = 0)
and (Year mod 4000 <> 0) and
((Year mod 100 <> 0) or (Year mod 400 = 0));
end;

Насчет алгоритма. Рождество Христово-то ведь не 31 декабря было, а 24 декабря [кстати, 0001 года или 0001 до нашей эры?]

Ты серьёзно? Даже первого четырёхтысячного года ещё не было и до него не дожиёт ни автор проги, ни сама прога, ни её юзверь." писал(а):Т.е. помимо вышеуказанных условий есть еще одно: каждый 4000-й год - НЕ високосный
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
- mc-black
- Сообщения: 250
- Зарегистрирован: 08 май 2008, 16:09
- Откуда: Россия, Нижний Новгород
- Контактная информация:
BBB
Насчет 4000 нигде пока не слышал. Можете указать источник информации более достоверный, чем функция в Паскале? По-моему пока этот срок не настал и до конца еще никто точно не договорился по корректировке через 4000 лет. Время же еще есть, чтобы договориться)))
Насчет даты рождения Христа по Григорианскому календарю, сейчас фиг знает как оно, возможно и так как Вы пишите, ведь до введения Григорианского был Юлианский календарь, тогда было сделано несколько корректировок дат. Когда Иисус родился там вообще х.з. какой календарь был. Я так понимаю, что человеку надо решить задачу без лишнего религиозного фанатизма, т.е. с такими (примерно) неверными допущениями:
1. Предполагаем, что рождение Иисуса стало началом отсчета дат по Григорианскому календарю.
2. Первым днем (с рождения Христа) этого календаря предположим, что будет 1 января 0001 года от Рождетва Христова.
Тогда можно уже не спорить, а начинать тупо вычислять.
А кто-нибудь знал, что в СССР где-то в 30-х годах для удобства планирования временно вводились 5-и и 6-и дневные недели?!))))) Если не верите, могу уточнить, когда именно.
erazer89, когда-то я написал небольшую программку-календарь на ассемблере MASM (MASM32 SDK), там есть отсчет количества дней с 1900 года, можешь выдрать оттуда кусок какой понравится и переделать на 0-й год - исходники открытые. http://mc-bkack.narod.ru/dzp.htm
Насчет 4000 нигде пока не слышал. Можете указать источник информации более достоверный, чем функция в Паскале? По-моему пока этот срок не настал и до конца еще никто точно не договорился по корректировке через 4000 лет. Время же еще есть, чтобы договориться)))
Насчет даты рождения Христа по Григорианскому календарю, сейчас фиг знает как оно, возможно и так как Вы пишите, ведь до введения Григорианского был Юлианский календарь, тогда было сделано несколько корректировок дат. Когда Иисус родился там вообще х.з. какой календарь был. Я так понимаю, что человеку надо решить задачу без лишнего религиозного фанатизма, т.е. с такими (примерно) неверными допущениями:
1. Предполагаем, что рождение Иисуса стало началом отсчета дат по Григорианскому календарю.
2. Первым днем (с рождения Христа) этого календаря предположим, что будет 1 января 0001 года от Рождетва Христова.
Тогда можно уже не спорить, а начинать тупо вычислять.
А кто-нибудь знал, что в СССР где-то в 30-х годах для удобства планирования временно вводились 5-и и 6-и дневные недели?!))))) Если не верите, могу уточнить, когда именно.
erazer89, когда-то я написал небольшую программку-календарь на ассемблере MASM (MASM32 SDK), там есть отсчет количества дней с 1900 года, можешь выдрать оттуда кусок какой понравится и переделать на 0-й год - исходники открытые. http://mc-bkack.narod.ru/dzp.htm
На заказ: VBA, Excel mc-black@yandex.ru
Увы, нет. Хотя, признаться, я и не искалmc-black писал(а): Насчет 4000 нигде пока не слышал. Можете указать источник информации более достоверный, чем функция в Паскале? По-моему пока этот срок не настал и до конца еще никто точно не договорился по корректировке через 4000 лет. Время же еще есть, чтобы договориться)))


Кстати, на форуме алгоритм вычисления "Високосный ли год?" уже обсуждался около двух лет назад.
Слышал про это. Но подробностей не знаю. Кстати, если помните фильм "Волго-Волга", то там есть кадры, когда на фоне параходного гребного колеса прокручиваются титры "Прошел первый день шестидневки", "Прошел второй день шестидневки" и т.д.А кто-нибудь знал, что в СССР где-то в 30-х годах для удобства планирования временно вводились 5-и и 6-и дневные недели?!))))) Если не верите, могу уточнить, когда именно.
В той же упомянутой библиотеке OpDate есть вычисление кол-ва дней с 1600 года. Собственно, у них это объявлено типом данных Julian = longint и равно как раз ко-ву прошедших дней с 1600 года. И многие процедуры/функции библиотеки имеют дело именно с этим типом.erazer89, когда-то я написал небольшую программку-календарь на ассемблере MASM (MASM32 SDK), там есть отсчет количества дней с 1900 года,
Маша! Выйди и вернись навеселе! Дубровский в пересказе идиота.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
На таком веселе они и были, Факт!
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
На таком веселе они и были, Факт!
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".