Страницы

Translate

воскресенье, 15 сентября 2013 г.

Exercise 5.9. Rewrite the routines day_of_year and month_day with pointers instead of indexing.Exercise 5.9. Rewrite the routines day_of_year and month_day with pointers instead of indexing.

Exercise 5.9. Rewrite the routines day_of_year and month_day with pointers instead of indexing.


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


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

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

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