/******************************************************************** * * * This program calculates the Eastern Orthodox Easter Day * * for any year between 1753 and 4000. Translated to C from * * a program in Pascal posted to bit.listserv.hellas by * * Apostolos Syropoulos, it comes with no warranty whatsoever. * * * * Pascalis Ligdas, one humid day, Aug. 1993 * * U.of Md. College Park * * * ********************************************************************/ #include #define iabs(x) ((x>=0)?(x):(-x)) int year, epakti, month, fullmoon, Easter, fullmoonday; int daynumber(dd,mm,yy) int dd, mm, yy; { int yearincentury, century; int day, month, year; month = mm; year = yy; day = dd; century = year/100; yearincentury = year%100; if(month>=3) { month-=2; } else { month+=10; if(yearincentury>0) { yearincentury--; } else { yearincentury = 99; century--; } } return(((int)(2.61*month-0.2)+day+yearincentury+ century/4+yearincentury/4-2*century) % 7); /* if daynumber=0 then day is Sunday, */ /* if daynumber=1 then day is Monday, etc. */ } main() { printf("\nEastern Orthodox Easter Day Calculation Program.\n"); do { printf("Enter year..."); scanf("%d", &year); }while((year<1753)&&(year>4000)); epakti = (((year-2)%19) * 11) % 30; printf("\epakti: %d\n",epakti); if(epakti>23) { month = 4; } else { month = 3; } fullmoon = 44 - epakti + 13; if((month==4)&&(fullmoon>30)) { month++; fullmoon-=30; } else if((month==3)&&(fullmoon>31)) { month++; fullmoon-=31; } fullmoonday = iabs(daynumber(fullmoon,month,year)); switch(fullmoonday){ case 0: Easter = fullmoon+7;break; case 1: Easter = fullmoon+6;break; case 2: Easter = fullmoon+5;break; case 3: Easter = fullmoon+4;break; case 4: Easter = fullmoon+3;break; case 5: Easter = fullmoon+2;break; case 6: Easter = fullmoon+1;break; } if((month==3)&&(Easter>31)) { month++; Easter-=31; } else if((month==4)&&(Easter>30)) { month++; Easter-=30; } printf("\nEaster date : %d-%d-%d\n", Easter, month, year); }