summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSadeep Madurange <smadurange@users.noreply.github.com>2022-01-05 21:38:37 +0800
committerSadeep Madurange <smadurange@users.noreply.github.com>2022-01-05 21:38:37 +0800
commit87761c2c54782588c0a5a7f0a68eabb08407e825 (patch)
tree6b39de0df451eaeedfef053fde3ae97a54a6eb30
parenta669c07c5fc845bd6db25a79d9b22bd21e3b2831 (diff)
downloadk&r-exercises-87761c2c54782588c0a5a7f0a68eabb08407e825.tar.gz
5.9
-rw-r--r--5/9.c36
1 files changed, 3 insertions, 33 deletions
diff --git a/5/9.c b/5/9.c
index 5bcd213..62459fd 100644
--- a/5/9.c
+++ b/5/9.c
@@ -1,5 +1,3 @@
-#include <stdio.h>
-
static char daytab[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}};
@@ -8,26 +6,10 @@ static char daytab[2][13] = {
int day_of_year(int year, int month, int day) {
int i, leap;
- // leap year logic is only valid if this is true.
- if (year < 1752) {
- printf("error: invalid year\n");
- return -1;
- }
-
- if (month < 1 || month > 12) {
- printf("error: invalid month\n");
- return -1;
- }
-
- if (day < 1) {
- printf("error: invalid day\n");
- return -1;
- }
-
leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
for (i = 1; i < month; i++)
- day += daytab[leap][i];
+ day += *(*(daytab + leap) + i);
return day;
}
@@ -36,22 +18,10 @@ int day_of_year(int year, int month, int day) {
void month_day(int year, int yearday, int *pmonth, int *pday) {
int i, leap;
- if (year < 0) {
- *pmonth = *pday = -1;
- printf("error: invalid year\n");
- return;
- }
-
- if (yearday < 1) {
- *pmonth = *pday = -1;
- printf("error: invalid yearday\n");
- return;
- }
-
leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
- for (i = 1; yearday > daytab[leap][i]; i++)
- yearday -= daytab[leap][i];
+ for (i = 1; yearday > *(*(daytab + leap) + i); i++)
+ yearday -= *(*(daytab + leap) + i);
*pmonth = i;
*pday = yearday;