1
1
/*
2
2
* Exercise 5-9. Rewrite the routine day_of_year and month_day with pointers
3
3
* instead of indexing.
4
+ *
4
5
* By Faisal Saadatmand
5
6
*/
6
7
9
10
/* functions */
10
11
int day_of_year (int , int , int );
11
12
void month_day (int , int , int * , int * );
12
- char * month_name (int );
13
+ char * month_name (int );
13
14
14
- static char daytab [2 ][13 ] = {
15
+ static char daytab [][13 ] = {
15
16
{0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 },
16
17
{0 , 31 , 29 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 }
17
18
};
@@ -24,18 +25,11 @@ int day_of_year(int year, int month, int day)
24
25
{
25
26
int i , leap ;
26
27
27
- if ((year < 1 ) || ( month < 1 && month > 12 ) || ( day < 1 && day > 31 ) )
28
+ if ((year < 1 ) || month < 1 || month > 12 || day < 1 || day > 31 )
28
29
return -1 ;
29
-
30
30
leap = (year % 4 == 0 && year % 100 ) || year % 400 == 0 ;
31
-
32
31
for (i = 1 ; i < month ; i ++ )
33
- day += * ((* (pdaytab + leap )) + i );
34
- //day += *(daytab[leap] + i);
35
- //day += (*(daytab + leap)) [i];
36
- //day += *((*(daytab + leap)) + i);
37
- //day += *(&daytab[0][0] + 4 * leap + i);
38
-
32
+ day += * (* (pdaytab + leap ) + i );
39
33
return day ;
40
34
}
41
35
@@ -44,14 +38,15 @@ void month_day(int year, int yearday, int *pmonth, int *pday)
44
38
{
45
39
int i , leap ;
46
40
41
+ if (year < 0 || yearday < 1 || yearday > 366 ) {
42
+ * pmonth = * pday = 0 ;
43
+ return ;
44
+ }
47
45
leap = (year % 4 == 0 && year % 100 ) || year % 400 == 0 ;
48
-
49
46
for (i = 1 ; yearday > daytab [leap ][i ]; i ++ )
50
47
yearday -= * (* (pdaytab + leap ) + i );
51
-
52
- (i < 1 || i > 12 || year < 1 ) ? (* pmonth = * * pdaytab ) : (* pmonth = i );
53
- (yearday < 1 || yearday > 366 || year < 1 ) ? (* pday = * * pdaytab ) :
54
- (* pday = yearday );
48
+ * pmonth = i ;
49
+ * pday = yearday ;
55
50
}
56
51
57
52
/* month_name: return name of n-th month */
@@ -72,17 +67,14 @@ int main(void)
72
67
{
73
68
int yearday , month , day ;
74
69
75
- if ((yearday = day_of_year (2018 , 9 , 3 )) >= 0 )
76
- printf ("%i day of the year \n" , yearday );
70
+ if ((yearday = day_of_year (2018 , 9 , 3 )) < 0 )
71
+ printf ("Invalid input \n" );
77
72
else
78
- printf ("invalid input\n" );
79
-
73
+ printf ("day of the year: %i\n" , yearday );
80
74
month_day (2018 , 246 , & month , & day );
81
-
82
- if (month != 0 && day != 0 )
83
- printf ("%s %i\n" , month_name (month ), day );
75
+ if (!month || !day )
76
+ printf ("Invalid input\n" );
84
77
else
85
- printf ("invalid input\n" );
86
-
78
+ printf ("%s %i\n" , month_name (month ), day );
87
79
return 0 ;
88
80
}
0 commit comments