• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Определение даты Пасхи

Vladimir_S

Супермодераторы
Команда форума
Регистрация
27 Авг 2008
Сообщения
27,807
Реакции
1,025
Баллы
0
Определение даты Пасхи

Осуществил, наконец, давнюю задумку: составил программу расчета даты Пасхи в любом году. Определяются даты Православной (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.
 

Вложения

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

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

Вложения

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

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

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

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

в программе просто, 7 числа... праздник показан у евреев...
 
Решил не откладывать) правда практически использовал исходный код почти без изменения и оптимизации для лазаруса (дельфи)...
ниже приведен архив с полным проектом под лазарус (хотя скорее всего откроется и нормально откомпилируется и в дельфи)
также .exe файл был упакован upx
Пытался экзешник запустить - не хочет. Либо вовсе не запускается, либо что-то молниеносно упрыгивает за край экрана. ЧЯДНТ?
 
А у меня прекрасно все запустилось и работает (я про экзешник Креола).
 
XP Prof 32 бит - на всякий случай. :)
 
Прикольно...:) жалко что он не дает второй раз поиск задать, выходить после первого запроса....
Олег, да какие проблемы? Пожалуйста, зациклил:
Посмотреть вложение easter1.zip
Владимир - не знаю если ты знаешь, праздник у евреев начинается вечером ( день до того) ... на пример - в 2012 году в апреле 6 вечером зайдет песах)( в точности - вечер Песаха - что и есть начало Праздника.)
в программе просто, 7 числа... праздник показан у евреев...
Ну, я алгоритмом готовым пользовался. А менять - боязно :D.
 
Сомнительно... Но у меня разрешение высокое стоит.
 
Нормально запускается и работает. Win7 Проф. х64
 
Такая же. Может быть, по низкому экранному разрешению не работает (у меня 600х800)?
Да. Проблема была в разрешении.
Вот исправленный вариант. У меня просто разрешение широкоформатное(1366х768) и форма при компиляции была справа) вот там изначально программа и запускалась. С низким разрешением оно естественно и улетало вправо за экран))...
 

Вложения

Да. Проблема была в разрешении.
Вот исправленный вариант. У меня просто разрешение широкоформатное(1366х768) и форма при компиляции была справа) вот там изначально программа и запускалась. С низким разрешением оно естественно и улетало вправо за экран))...
А - ну вот это уже, как говорится, "другой коленкор". Спасибо!
 

Вложения

  • East.webp
    East.webp
    7.1 KB · Просмотры: 80
Если есть еще какие-то интересные проекты которые целесообразно запихать в дельфи то выкладывай) будет интересно посмотреть...
 
А можно вместо той рожи (или лапы, я плохо вижу), что в левом верхнем углу окна, вставить изображение пасхального куличика? :)
 
Если есть еще какие-то интересные проекты которые целесообразно запихать в дельфи то выкладывай) будет интересно посмотреть...
Таки есть парочка. С одним-то просто: это атрибуты восточного календаря (животное, цвет, стихия), тут примерно то же, что с Пасхой, а вот другой... Есть у меня программка выдачи календаря любого года, но тут - графика. Возьмешься?
Ну вот два варианта ORIENT.
С кириллицей:
Код:
{ Это для перевода текущего года в восточную символику }
CONST
  Matter_Color:ARRAY[0..9] of STRING[16]=('Металл   Белый  ',
                                          'Металл   Белый  ',
                                          'Вода     Черный ',
                                          'Вода     Черный ',
                                          'Дерево   Синий  ',
                                          'Дерево   Синий  ',
                                          'Огонь    Красный',
                                          'Огонь    Красный',
                                          'Земля    Желтый ',
                                          'Земля    Желтый ');

 Animal:ARRAY[0..11] of STRING[8]=('Обезьяна',
                                   'Курица  ',
                                   'Пес     ',
                                   'Свинья  ',
                                   'Мышь    ',
                                   'Корова  ',
                                   'Тигр    ',
                                   'Заяц    ',
                                   'Дракон  ',
                                   'Змея    ',
                                   'Конь    ',
                                   'Овца    ');

VAR
 CurYear, Mod1, Mod2, Mod3:LongInt;

BEGIN
 WRITELN('Для выхода из программы введите нулевой год.');
 WRITELN;
 REPEAT
  WRITE('Введите год:  '); READLN(CurYear);
  IF CurYear>0 THEN
   BEGIN
    Mod1:=CurYear mod 60;
    Mod2:=Mod1 mod 10;
    Mod3:=Mod1 mod 12;
    WRITELN(CurYear:8,' Н.Э.      ',Animal[Mod3],'   ',
            Matter_Color[Mod2]);
   END;
 UNTIL CurYear<=0;
END.
С латиницей:
Код:
CONST
  Matter_Color:ARRAY[0..9] of STRING[16]=('Metal    White  ',
                                          'Metal    White  ',
                                          'Water    Black  ',
                                          'Water    Black ',
                                          'Wood     Blue  ',
                                          'Wood     Blue  ',
                                          'Fire     Red   ',
                                          'Fire     Red   ',
                                          'Earth    Yellow',
                                          'Earth    Yellow');

 Animal:ARRAY[0..11] of STRING[8]=('Monkey',
                                   'Hen   ',
                                   'Dog   ',
                                   'Swine ',
                                   'Mouse ',
                                   'Cow   ',
                                   'Tiger ',
                                   'Rabbit',
                                   'Dragon',
                                   'Snake ',
                                   'Horse ',
                                   'Sheep ');

VAR
 CurYear, Mod1, Mod2, Mod3:LongInt;

BEGIN
 WRITELN('Enter zero year to exit');
 WRITELN;
 REPEAT
  WRITE('Enter the year:  '); READLN(CurYear);
  IF CurYear>0 THEN
   BEGIN
    Mod1:=CurYear mod 60;
    Mod2:=Mod1 mod 10;
    Mod3:=Mod1 mod 12;
    WRITELN(CurYear:8,'   ',Animal[Mod3],'   ',Matter_Color[Mod2]);
   END;
 UNTIL CurYear<=0;
END.
 
Можно и с куличиком))
И еще небольшая плюшка)))
вот только exe файл...

Ну а почему бы и нет)
Кст. в lazaruse увидел интересную штуку. i18n для перевода.(правда я ее ни разу не использовал...)
А с графикой в дельфи примерно то же самое что и в паскале. Только работа с канвой...
 

Вложения

Назад
Сверху