lolamontes69

K+R Exercise5_9

Sep 7th, 2014
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.54 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 int nonleap[]  = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  8. static int leapyear[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  9. char *month_name(int n);
  10.  
  11. int main()
  12. {
  13.     char temp[4];
  14.     int yearday, year, month, day;
  15.     int res=-1;
  16.     int *pmonth;
  17.     int *pday;
  18.  
  19.     char *pm;
  20.  
  21.     while(res==-1) {
  22.         printf("Enter year >");
  23.         gets(temp);
  24.         year=atoi(temp);
  25.         printf("Enter month >");
  26.         gets(temp);
  27.         month=atoi(temp);
  28.         printf("Enter day >");
  29.         gets(temp);
  30.         day=atoi(temp);
  31.         res = day_of_year(year, month, day);
  32.         if(res==-1)
  33.             printf("You entered %d/%d/%d...\nTry again.\n",year,month,day);
  34.     }
  35.     printf("Day %d of the year.\n",res);
  36.  
  37.     day = 99;
  38.     pmonth = &month;
  39.     pday = &day;
  40.  
  41.     while(day==99) {
  42.         printf("Enter year >");
  43.         gets(temp);
  44.         year=atoi(temp);
  45.         printf("Enter yearday >");
  46.         gets(temp);
  47.         yearday=atoi(temp);
  48.    
  49.         month_day(year, yearday, pmonth, pday);
  50.         if(day==99)
  51.             printf("You entered %d/%d...\nTry again.\n",year,yearday);
  52.     }
  53.     printf("result: %d/%d/%d\n",year,month,day);
  54.     pm = month_name(month);
  55.     printf("The month is called %s\n",pm);
  56.     return 0;
  57. }
  58.  
  59. /* day_of_year: set day of year from month & day */
  60. int day_of_year(int year, int month, int day)
  61. {
  62.     int i, leap;
  63.     static int *p1[2];
  64.    
  65.     p1[0] = nonleap;
  66.     p1[1] = leapyear;
  67.  
  68.     leap = year%4 == 0 && year%100 != 0 || year%400 == 0;
  69.     for(i = 1; i < month; i++)
  70.         day += *(++p1[leap]);
  71.     return day;
  72. }
  73.  
  74.  
  75. /* month_day: set month, day from day of year */
  76. void month_day(int year, int yearday, int *pmonth, int *pday)
  77. {
  78.     int i, leap;
  79.     static int *p1[2];
  80.    
  81.     p1[0] = nonleap;
  82.     p1[1] = leapyear;
  83.  
  84.     leap = year%4 == 0 && year%100 != 0 || year%400 == 0;
  85.     for(i=1; yearday>*(++p1[leap]); i++)
  86.         yearday -= *(p1[leap]);
  87.     *pmonth = i;
  88.     *pday = yearday;
  89. }
  90.  
  91.  
  92. /* month_name: return name of n-th month */
  93. char *month_name(int n)
  94. {
  95.     static char *name[] = {
  96.         "Illegal month",
  97.         "January", "February", "March",
  98.         "April", "May", "June",
  99.         "July", "August", "September",
  100.         "October", "November", "December"
  101.     };
  102.     printf("month = %s\n",name[n]);
  103.     return(n < 1 || n > 12) ? name[0] : name[n];
  104. }
Advertisement
Add Comment
Please, Sign In to add comment