lolamontes69

K+R Exercise5_8

Sep 7th, 2014
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int day_of_year(int year, int month, int day);
  5. void month_day(int year, int yearday, int *pmonth, int *pday);
  6.  
  7. static char daytab[2][13] = {
  8.     {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
  9.     {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
  10. };
  11.  
  12. int main()
  13. {
  14.     char temp[4];
  15.     int yearday, year, month, day;
  16.     int res=-1;
  17.     int *pmonth;
  18.     int *pday;
  19.  
  20.     while(res==-1) {
  21.         printf("Enter year >");
  22.         gets(temp);
  23.         year=atoi(temp);
  24.         printf("Enter month >");
  25.         gets(temp);
  26.         month=atoi(temp);
  27.         printf("Enter day >");
  28.         gets(temp);
  29.         day=atoi(temp);
  30.         res = day_of_year(year, month, day);
  31.         if(res==-1)
  32.             printf("You entered %d/%d/%d...\nTry again.\n",year,month,day);
  33.     }
  34.     printf("Day %d of the year.\n",res);
  35.  
  36.     day = 99;
  37.     pmonth = &month;
  38.     pday = &day;
  39.  
  40.     while(day==99) {
  41.         printf("Enter year >");
  42.         gets(temp);
  43.         year=atoi(temp);
  44.         printf("Enter yearday >");
  45.         gets(temp);
  46.         yearday=atoi(temp);
  47.    
  48.         month_day(year, yearday, pmonth, pday);
  49.         if(day==99)
  50.             printf("You entered %d/%d...\nTry again.\n",year,yearday);
  51.     }
  52.     printf("result: %d/%d/%d\n",year,month,day);
  53.  
  54.     return 0;
  55. }
  56.  
  57. /* day_of_year: set day of year from month & day */
  58. int day_of_year(int year, int month, int day)
  59. {
  60.     int i, leap;
  61.  
  62.     if(year<1 || month<1 || day<1 || month>12)
  63.         return -1;
  64.     leap = year%4 == 0 && year%100 != 0 || year%400 == 0;
  65.     if(day>daytab[leap][month])
  66.         return -1;
  67.     for(i = 1; i < month; i++)
  68.         day += daytab[leap][i];
  69.     return day;
  70. }
  71.  
  72. /* month_day: set month, day from day of year */
  73. void month_day(int year, int yearday, int *pmonth, int *pday)
  74. {
  75.     int i, leap;
  76.  
  77.     leap = year%4 == 0 && year%100 != 0 || year%400 == 0;
  78.     if(year<1 || yearday<1 || (leap && yearday>366) || (!leap && yearday>365))
  79.         *pday = 99;
  80.     else {
  81.         for(i=1; yearday>daytab[leap][i]; i++)
  82.             yearday -= daytab[leap][i];
  83.         *pmonth = i;
  84.         *pday = yearday;
  85.     }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment