Bug found in Primes program.
[C-Programming-Examples.git] / ex_5-8.c
blobfc0f3903f61c3191263e051b0e49bfd7bbc2a80d
1 #include <stdio.h>
3 static char daytab[2][13] =
5 { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
6 { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
7 };
9 /* set day of year based on month and day */
10 int day_of_year(int year, int month, int day)
12 int i, leap;
14 if(year < 1752 || month > 12 || month < 1 || day < 1) { return -1; }
16 leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
17 if(day > daytab[leap][month]) { return -1; } // day month pair OK?
19 for( i = 1; i < month; i++)
20 day += daytab[leap][i];
21 return day;
24 /* get month, day from day of year */
25 int month_day(int year, int yearday, int *pmonth, int *pday)
27 int i, leap;
29 if(year < 1752) { return -1; }
31 leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
32 if((leap && yearday > 366) || (!leap && yearday > 365)) { return -1; }
34 for(i = 1; yearday > daytab[leap][i]; i++)
35 yearday -= daytab[leap][i];
36 *pmonth = i;
37 *pday = yearday;
38 return 1;
41 int main()
43 int ans, month, day;
44 ans = day_of_year(2009, 2, 1);
45 printf("%d\n", ans);
46 ans = month_day(2009, 34, &month, &day);
48 if(ans)
49 printf("Day: %d\tMonth:%d\n", day, month);
51 int yearday, year = 2009;
52 int leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
54 for(month = 1; month <= 12; ++month)
56 printf("\n");
57 day = 0;
58 while(++day <= daytab[leap][month])
60 yearday = day_of_year(year, month, day);
61 printf("Y: %d\tM: %d\tD: %d\t->\tYD:%d\n", year, month, day, yearday);
63 printf("\n");
65 return 1;