/****************************************/
/* soubor yearday.c */
/* udci cislo dne v roce a naopak */
/* motivace K&R */
/****************************************/
static int day_tab[2][13] =
{{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
int day_of_year(int year, int month, int day)
{
int i, leap;
leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
for (i = 1; i < month; i++)
day += day_tab[leap][i];
return day;
}
int month_day(int year, int yearday, int *pmonth, int *pday)
{
int i, leap;
leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
for (i = 1; yearday > day_tab[leap][i]; i++)
yearday -= day_tab[leap][i];
*pmonth = i;
*pday = yearday;
return i;
}
int main()
{
int year = 1993, month = 11, day = 12, yearday, m, d;
yearday = day_of_year(year, month, day);
month_day(year, yearday, &m, &d);
return 0;
}