Страницы

Translate

среда, 11 сентября 2013 г.

Exercise 5.8. There is no error checking in day_of_year or month_day. Remedy this defect.

Exercise 5.8. There is no error checking in day_of_year or month_day. Remedy this defect.


/* day_of_year */
int day_of_year(int year, int month, int day)
{
    int i, leap;
    
    if(year < 1)
        return -1;
    leap = (year%4 == 0 && year%100 != 0) || year%400 == 0;
    if(month < 1 || month > 12)
        return -1;
    if(day < 1 || day > daytab[leap][month])
        return -1;
    for(i = 1; i < month; i++)
        day += daytab[leap][i];
    return day;
}


/* month_day */
void month_day(int year, int yearday, int *pmonth, int *pday)
{
    int i, leap;
    
    if(year < 1 || yearday < 1)
    {
        *pmonth = -1;
        *pday = -1;
        return;
    }
    leap = (year%4 == 0 && year%100 != 0) || year%400 ==  0;
    if(leap == 1 && yearday > 366)
    {
        *pmonth = -1;
        *pday = -1;
        return;
    }
    if(leap == 0 && yearday > 365)
    {
        *pmonth = -1;
        *pday = -1;
        return;
    }        
    for(i = 0; yearday > daytab[leap][i]; i++)
        yearday -= daytab[leap][i];
    *pmonth = i;
    *pday = yearday;
}

Комментариев нет:

Отправить комментарий