Технический форум

Технический форум (http://www.tehnari.ru/)
-   Форум программистов (http://www.tehnari.ru/f22/)
-   -   Определение даты Пасхи (http://www.tehnari.ru/f22/t69671/)

Vladimir_S 25.02.2012 11:58

Определение даты Пасхи
 
Вложений: 1
Осуществил, наконец, давнюю задумку: составил программу расчета даты Пасхи в любом году. Определяются даты Православной (Orthodox), католической (Catholic) и еврейской (Jewish) Пасхи.
Очень это оказалось непростым делом: алгоритмов выложено много, но далеко не все правильные, многие с ошибками, а с учетом того, что создатели сайтов имеют обыкновение бездумно друг у друга копировать, то, сами понимаете... Ну вроде отладил. Если кому интересно, прошу протестировать и, буде ошибки вылезут, о том сообщить.
Ниже выложен исходник на Паскале и экзешник для DOS-моды. Если бы кто из Дельфийцев сделал из этого путный исполняемый файл под Windows, было бы совсем хорошо. Но это так, если есть желание.
Код:

Var
 Y,a,b,c,d,e,f,g,h,i,k,L,m,n,p,A1,M1,Date:LongInt;
 Month:String;
 Ksi,m2:Real;
Begin
 Write('Year = ');
 Readln(Y);
 Writeln;
 a:=(19*(Y mod 19)+15) mod 30;
 b:=(2*(Y mod 4)+4*(Y mod 7)+6*a+6) mod 7;
 If (a+b)>=10 then
  begin
  If a+b-9+13<31 then
    begin
    Month:='April';
    Date:=a+b-9+13;
    end
  else
    begin
    Month:='May';
    Date:=a+b-9+13-30;
    end;
  end
 else
  begin
  Month:='April';
  Date:=22+a+b+13-31;
  end;
 Writeln('Orthodox:');
 Writeln(Date:2,' of '+Month);
 Writeln;
 a:=Y mod 19;
 b:=Y div 100;
 c:=Y mod 100;
 d:=b div 4;
 e:=b mod 4;
 f:=(b+8) div 25;
 g:=(b-f+1) div 3;
 h:=(19*a+b-d-g+15) mod 30;
 i:=c div 4;
 k:=c mod 4;
 L:=(32+2*e+2*i-h-k) mod 7;
 m:=(a+11*h+22*L) div 451;
 n:=(h+L-7*m+114) div 31;
 p:=(h+L-7*m+114) mod 31;
 If n=3 then Month:='March' else Month:='April';
 Date:=p+1;
 Writeln('Catholic:');
 Writeln(Date:2,' of '+Month);
 Writeln;
 A1:=Y+3760;
 a:=(12*A1+17) mod 19;
 b:=A1 mod 4;
 Ksi:=32.0440933+1.5542418*a+0.25*b-0.00317779*A1;
 M1:=Trunc(Ksi);
 m2:=Ksi-1.0*M1;
 c:=(M1+3*A1+5*b+5) mod 7;
 If (c=1) and (a>b) and (m2>=0.63287037) then
  Date:=M1+1
 else
 If (c=2) or (c=4) or (c=6) or
 ((c=0) and (a>11) and (m2>=0.89772376)) then
  Date:=M1+1
 else Date:=M1;
 Inc(Date,13);
 If Date>31 then
  begin
  Month:='April';
  Dec(Date,31);
  end else Month:='March';
 Writeln('Jewish:');
 Writeln(Date:2,' of '+Month);
 Readln;
End.


Алехандро 27.02.2012 23:39

Не плохо сделано... И главное весьма кстати, ведь скоро Пасха. Но я хотел поинтересоваться, не могли бы Вы подсказать мне какие-нибудь советы или книги или сайты для чайников по программированию(я хочу стать программистом)? Я буду Вам очень признателен если вы не откажете мне в помощи...Или возможно с вами как-то связяться , например по скайпу...

kreol 28.02.2012 00:08

Цитата:

Сообщение от Vladimir_S (Сообщение 688739)
Если бы кто из Дельфийцев сделал из этого путный исполняемый файл под Windows, было бы совсем хорошо

Я могу попробовать. только чуть позже когда бует время. Но делать в lazarus е

Алехандро сначала следует определиться в какой сфере программирования хотите работать...

kreol 28.02.2012 02:38

Вложений: 1
Решил не откладывать) правда практически использовал исходный код почти без изменения и оптимизации для лазаруса (дельфи)...
ниже приведен архив с полным проектом под лазарус (хотя скорее всего откроется и нормально откомпилируется и в дельфи)
также .exe файл был упакован upx

кочевник 28.02.2012 02:44

Цитата:

Сообщение от Vladimir_S (Сообщение 688739)
Православной (Orthodox), католической (Catholic) и еврейской (Jewish) Пасхи.

Предлагаю отмечать все!

Eli 28.02.2012 02:55

Прикольно...:) жалко что он не дает второй раз поиск задать, выходить после первого запроса....

а то что в командной консоли открывает - имхо не мешает..

показывает точно :) и на этот год и на потом ( даже до 2080 года есть :)) ) понятно дело что не покажет что праздник у евреев начинается вечером ( день до того) ... на пример - в 2012 году в апреле 6 вечером зайдет песах)

Eli 28.02.2012 03:09

прошу прощения ( просто ночь что и влияет уже на мышление... да и не успел исправить в самом посте сверху )

Цитата:

показывает точно и на этот год и на потом ( даже до 2080 года есть ) понятно дело что не покажет что праздник у евреев начинается вечером ( день до того) ... на пример - в 2012 году в апреле 6 вечером зайдет песах)
показывает точно( относительно) :) и на этот год и на потом ( даже до 2080 года есть :)) ) кстати - Владимир - не знаю если ты знаешь, праздник у евреев начинается вечером ( день до того) ... на пример - в 2012 году в апреле 6 вечером зайдет песах)( в точности - вечер Песаха - что и есть начало Праздника.)

в программе просто, 7 числа... праздник показан у евреев...

Vladimir_S 28.02.2012 11:19

Цитата:

Сообщение от kreol (Сообщение 690809)
Решил не откладывать) правда практически использовал исходный код почти без изменения и оптимизации для лазаруса (дельфи)...
ниже приведен архив с полным проектом под лазарус (хотя скорее всего откроется и нормально откомпилируется и в дельфи)
также .exe файл был упакован upx

Пытался экзешник запустить - не хочет. Либо вовсе не запускается, либо что-то молниеносно упрыгивает за край экрана. ЧЯДНТ?

Артём 28.02.2012 11:21

А у меня прекрасно все запустилось и работает (я про экзешник Креола).

Артём 28.02.2012 11:22

XP Prof 32 бит - на всякий случай. :)


Часовой пояс GMT +4, время: 09:33.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.