Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2010, 11:11   #1
Алёнк@
Новичок
Джуниор
 
Аватар для Алёнк@
 
Регистрация: 02.06.2010
Сообщений: 2
Смущение расщет даты пасхи

Программисты у меня к вам вопрос-у меня есть программа на delhi которая формирует календарь по заданому году...а мне нужна еще функция расщета даты пасхи.....спасите-помогите...кто то знает как это сделать???
Алёнк@ вне форума Ответить с цитированием
Старый 07.06.2010, 11:21   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А саму формулу рассчета ты знаешь?
Я так на ВИКИ почитал - там такая мутная математика...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.06.2010, 12:12   #3
DoDge_VipeR
Форумчанин
 
Аватар для DoDge_VipeR
 
Регистрация: 30.04.2010
Сообщений: 317
По умолчанию

РАСЧЕТ даты Пасхи



Код:
function Easter(Year: Integer): TDateTime;
{----------------------------------------------------------------}
{ Вычисляет и возвращает день Пасхи определенного года.          }
{ Идея принадлежит Mark Lussier, AppVision <MLussier@best.com>.  }
{ Скорректировано для предотвращения переполнения целых, если по }
{ ошибке передан год с числом 6554 или более.                    }
{----------------------------------------------------------------}

var
  nMonth, nDay, nMoon, nEpact, nSunday,
    nGold, nCent, nCorx, nCorz: Integer;
begin
  { Номер Золотого Года в 19-летнем Metonic-цикле: }
  nGold := (Year mod 19) + 1;
  { Вычисляем столетие: }
  nCent := (Year div 100) + 1;
  { Количество лет, в течение которых отслеживаются високосные года... }
  { для синхронизации с движением солнца: }
  nCorx := (3 * nCent) div 4 - 12;
  { Специальная коррекция для синхронизации Пасхи с орбитой луны: }
  nCorz := (8 * nCent + 5) div 25 - 5;
  { Находим воскресенье: }
  nSunday := (Longint(5) * Year) div 4 - nCorx - 10;
  { ^ Предохраняем переполнение года за отметку 6554}
  { Устанавливаем Epact - определяем момент полной луны: }
  nEpact := (11 * nGold + 20 + nCorz - nCorx) mod 30;
  if nEpact < 0 then
    nEpact := nEpact + 30;
  if ((nEpact = 25) and (nGold > 11)) or (nEpact = 24) then
    nEpact := nEpact + 1;
  { Ищем полную луну: }
  nMoon := 44 - nEpact;
  if nMoon < 21 then
    nMoon := nMoon + 30;
  { Позиционируем на воскресенье: }
  nMoon := nMoon + 7 - ((nSunday + nMoon) mod 7);
  if nMoon > l 31 then
  begin
    nMonth := 4;
    nDay := nMoon - 31;
  end
  else
  begin
    nMonth := 3;
    nDay := nMoon;
  end;
  Easter := EncodeDate(Year, nMonth, nDay);
end; {Easter}
delphiworld
icq:627719[сто сорок четыре] - помогу с Pascal & Delphi!

Последний раз редактировалось DoDge_VipeR; 07.06.2010 в 13:23.
DoDge_VipeR вне форума Ответить с цитированием
Старый 07.06.2010, 13:10   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
// Calculates and returns Easter Day for specified year.
// Originally from Mark Lussier, AppVision <MLussier@best.com>.
// Corrected to prevent integer overflow if it is inadvertedly
// passed a year of 6554 or greater.

function EasterSunday(const Year: Integer): TDateTime;
var
  Month, Day, Moon, Epact, Sunday,
  Gold, Cent, Corx, Corz: Integer;
begin
  { The Golden Number of the year in the 19 year Metonic Cycle: }
  Gold := (Year mod 19) + 1;
  { Calculate the Century: }
  Cent := (Year div 100) + 1;
  { Number of years in which leap year was dropped in order... }
  { to keep in step with the sun: }
  Corx := (3 * Cent) div 4 - 12;
  { Special correction to syncronize Easter with moon's orbit: }
  Corz := (8 * Cent + 5) div 25 - 5;
  { Find Sunday: }
  Sunday := (Longint(5) * Year) div 4 - Corx - 10;
              { ^ To prevent overflow at year 6554}
  { Set Epact - specifies occurrence of full moon: }
  Epact := (11 * Gold + 20 + Corz - Corx) mod 30;
  if Epact < 0 then
    Epact := Epact + 30;
  if ((Epact = 25) and (Gold > 11)) or (Epact = 24) then
    Epact := Epact + 1;
  { Find Full Moon: }
  Moon := 44 - Epact;
  if Moon < 21 then
    Moon := Moon + 30;
  { Advance to Sunday: }
  Moon := Moon + 7 - ((Sunday + Moon) mod 7);
  if Moon > 31 then
  begin
    Month := 4;
    Day := Moon - 31;
  end
  else
  begin
    Month := 3;
    Day := Moon;
  end;
  Result := EncodeDate(Year, Month, Day);
end;
p.s. (c) Project JEDI - unit JclDateTime.pas


___________________________________ ___________
DoDge_VipeR, сорри! я кинул текст в браузер, не обновив страничку!

Последний раз редактировалось Serge_Bliznykov; 07.06.2010 в 13:12.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
даты в си Александе еть я Помощь студентам 0 06.05.2010 22:13
Автоматизация заполнения даты и зависимость ячейки времени к ячейке даты. Каравай Microsoft Office Excel 14 11.03.2010 18:11
Даты Sparky БД в Delphi 6 02.10.2009 09:48
Вставка даты в БД artemavd БД в Delphi 4 07.08.2009 18:06
Даты не даты Nasya Microsoft Office Excel 3 22.08.2007 20:18