2015-10-08 5 views
-1

Я выполняю задачу (из учебника), которая должна вычислять количество прошедших дней между двумя датами. Я не могу понять, как вычисляются дни в конце формулы. В примере из учебника есть 202 дней между 8 августа 2004 года и 22 февраля 2005 года, основанные на формуле:Формула для вычисления количества прошедших дней

N=1461 * f(year,month)/4 + 153 * g(month)/5 + day, 
where f(year, month) = year -1 if month <=2 
         year otherwise 
and g(month) = month + 13  if month <= 2 
       month + 1  otherwise 

Но никаких указаний о том, как вычислить последнюю переменную «день». В приведенном выше примере последняя переменная «день» равна 3 для N1 и 21 для N2.

Откуда берутся эти цифры?

N1 = (1461 * 2004)/4 + (153 * 9)/5 + 3, 
N2 = (1461 * 2004)/4 + (153 * 15)/5 + 21. 

Кроме того, как была получена эта формула?

+1

ПОДОЗРИТЕЛЬНЫЕ вас у вас есть ошибка транскрипции из вашей книги. – chux

+0

* «никаких указаний о том, как вычислить последнюю переменную« день »* - обязательно день, как в день, месяц, год. –

+0

1461 - это количество дней в 4 года, но ложно предполагает, что каждый 4-й год является високосным годом. –

ответ

0

Я написал эту небольшую программу, основанную на формуле, но я до сих пор не могу понять, как дни вычисляемого (в конце формулы data.day):

// Program to compute the number of elapsed days 

#include <stdio.h> 

struct date 
{ 
    int month; 
    int day; 
    int year; 
}; 

int number_of_days (struct date data); 

int main (void) 
{ 
    int number1, number2; 
    struct date data1; 
    struct date data2; 

    printf ("Please, enter two dates (mm dd yyyy)"); 
    scanf ("%i%i%i %i%i%i", &data1.month, &data1.day, &data1.year, &data2.month, &data2.day, &data2.year); 

    number1 = number_of_days(data1); 
    number2 = number_of_days(data2); 

    printf("The number of elapsed days is %i\n", number2 - number1); 

    return 0; 
} 

int number_of_days (struct date data) 
{ 
    int number; 

    if (data.month <= 2) 
     number = (1461 * (data.year - 1))/4 + (153 * (data.month + 13))/5 + data.day; 
    else 
     number = (1461 * data.year)/4 + (153 * (data.month + 1))/5 + data.day; 

    return number; 
} 
Смежные вопросы