/****************************************************************************
* Obliczanie daty Tłustego Czwartku *
* 2015, Tymoteusz Czech <mail@tymek.cz> *
****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**
* @brief Check if year is leap year
* @param [in] y Given year
* @return 0 if false, 1 if true
*/
int leap_year(int y){
return ((y%4 == 0 && y%100 != 0) || y%400 == 0);
}
/**
* @brief Calculate day of Fat Thursday
* @param [in] y Given year
* @return NULL on error, or string with (day).0(month) of holiday
* @see http://g...content-available-to-author-only...o.gl/5rc7lo - day-of-march Easter calculus
*/
const char * fat_thursday(int y){
char * date;
int a, b, c, d, e, day, month;
if(y <= 30) return NULL;
a = y % 19;
b = y >> 2;
c = ((b / 25)|0) + 1;
d = (c * 3) >> 2;
e = ((a * 19) - (((c * 8 + 5) / 25)|0) + d + 15) % 30;
e += ((29578 - a - (e << 5)) >> 10);
e -= ((y % 7) + b - d + e + 2) % 7;
day = e - 52;
if(day < 1){
day += 28;
if(leap_year(y)) day++;
if(day < 1){
day += 31;
month = 1;
} else {
month = 2;
}
} else {
month = 3;
}
date
= (char *)malloc( (size_t)sizeof(char *) * ((day
>10)?5:6) ); sprintf(date
, "%d.%02d", day
, month
); return date;
}
int main(){
int year;
for(year = 2000; year <= 2300; year++){
printf("%6s.%d\n", fat_thursday
(year
), year
); }
return 0;
}
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogT2JsaWN6YW5pZSBkYXR5IFTFgnVzdGVnbyBDendhcnRrdSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqIDIwMTUsIFR5bW90ZXVzeiBDemVjaCA8bWFpbEB0eW1lay5jej4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgovKioKICogQGJyaWVmIENoZWNrIGlmIHllYXIgaXMgbGVhcCB5ZWFyCiAqIEBwYXJhbSBbaW5dIHkgR2l2ZW4geWVhcgogKiBAcmV0dXJuIDAgaWYgZmFsc2UsIDEgaWYgdHJ1ZQogKi8KaW50IGxlYXBfeWVhcihpbnQgeSl7ICAgCiAgIHJldHVybiAoKHklNCA9PSAwICYmIHklMTAwICE9IDApIHx8IHklNDAwID09IDApOwp9CgovKioKICogQGJyaWVmIENhbGN1bGF0ZSBkYXkgb2YgRmF0IFRodXJzZGF5CiAqIEBwYXJhbSBbaW5dIHkgR2l2ZW4geWVhcgogKiBAcmV0dXJuIE5VTEwgb24gZXJyb3IsIG9yIHN0cmluZyB3aXRoIChkYXkpLjAobW9udGgpIG9mIGhvbGlkYXkKICogQHNlZSBodHRwOi8vZy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uby5nbC81cmM3bG8gLSBkYXktb2YtbWFyY2ggRWFzdGVyIGNhbGN1bHVzCiAqLwpjb25zdCBjaGFyICogZmF0X3RodXJzZGF5KGludCB5KXsKCWNoYXIgKiBkYXRlOwoJaW50IGEsIGIsIGMsIGQsIGUsIGRheSwgbW9udGg7CgkKCWlmKHkgPD0gMzApIHJldHVybiBOVUxMOwoJYSA9IHkgJSAxOTsKCWIgPSB5ID4+IDI7CgljID0gKChiIC8gMjUpfDApICsgMTsKCWQgPSAoYyAqIDMpID4+IDI7CgllID0gKChhICogMTkpIC0gKCgoYyAqIDggKyA1KSAvIDI1KXwwKSArIGQgKyAxNSkgJSAzMDsKCWUgKz0gKCgyOTU3OCAtIGEgLSAoZSA8PCA1KSkgPj4gMTApOwoJZSAtPSAoKHkgJSA3KSArIGIgLSBkICsgZSArIDIpICUgNzsKCWRheSA9IGUgLSA1MjsKCWlmKGRheSA8IDEpewoJCWRheSArPSAyODsKCQlpZihsZWFwX3llYXIoeSkpIGRheSsrOwoJCWlmKGRheSA8IDEpewoJCQlkYXkgKz0gMzE7CgkJCW1vbnRoID0gMTsKCQl9IGVsc2UgewoJCQltb250aCA9IDI7CgkJfQoJfSBlbHNlIHsKCQltb250aCA9IDM7Cgl9CglkYXRlID0gKGNoYXIgKiltYWxsb2MoIChzaXplX3Qpc2l6ZW9mKGNoYXIgKikgKiAoKGRheT4xMCk/NTo2KSApOwoJc3ByaW50ZihkYXRlLCAiJWQuJTAyZCIsIGRheSwgbW9udGgpOwoJcmV0dXJuIGRhdGU7Cn0KCmludCBtYWluKCl7CglpbnQgeWVhcjsKCWZvcih5ZWFyID0gMjAwMDsgeWVhciA8PSAyMzAwOyB5ZWFyKyspewoJCXByaW50ZigiJTZzLiVkXG4iLCBmYXRfdGh1cnNkYXkoeWVhciksIHllYXIpOwoJfQoJcmV0dXJuIDA7Cn0=