2013-10-14 47 views
0

所以我必須寫纔是最重要的一天,因爲1.1.1另外一個計劃,我必須使用公曆這一切的時間(即使它不是從1.1.1使用) 不管怎麼說,這裏是我寫的,但我相信它有一些錯誤:計數天1.1.1

#include <stdio.h> 
int main() 

{ 
    int d, m, r; 
    printf("Podaj dzien, miesiac i rok\n"); 
    scanf("%d %d %d", &d, &m, &r); 
    printf("%d", iledni(d, m, r)); 
    return 0; 
} 

int iledni(int d, int m, int r) 
{ 
    int dni,x; 
    int msc[12]={0,31,59,90,120,151,181,212,243,273,304,334}; 
    dni=r*365+msc[m-1]+d-1; 
    dni=dni+(int)((r-1)/4)-(int)((r-1)/100)+(int)((r-1)/400); 
    if (m>2 && r%4 == 0 && r%100 != 0 || r%400 == 0) 
     dni=dni+1; 
    return dni; 
} 

我的下一個任務是寫計數天,因爲我出生到當前日期的功能,我不知道該數據應該如何進入,所以現在我認爲它只是寫在INT主要(),所以我不得不改變只是iledni功能,但我有一些問題的,要確切錯誤的結果,並就如何解決它> <

不知道10
#include <stdio.h> 
int main() 
{ 
    int d=17, m=8, r=2013; 
    int du=25, mu=11, ru=1994; 
    printf("%d", iledni(d, m, r, du, mu, ru)); 
    return 0; 
} 

int iledni(int d, int m, int r, int du, int mu, int ru) 
{ 
    int dni,x; 
    int msc[12]={0,31,59,90,120,151,181,212,243,273,304,334}; 
    int mscdodni[12]={31,28,31,30,31,30,31,31,30,31,30,31}; 
    dni=(r-ru)*365+msc[m-1]-msc[mu]+d-1+(mscdodni[mu-1]-du); 
    for (ru=1994; ru<=r; ru++) 
     { 
     if (ru%4 == 0 && ru%100 != 0 || ru%400 == 0) 
      dni=dni+1; 
     } 
return dni; 
} 

告訴我,如果我應該解釋任何行,我也是初學者,所以我很抱歉,如果我寫的東西沒有意義,我不太瞭解C或編程整體。

+0

的技術術語是「Proleptic公曆」。請參閱http://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar。 –

+0

謝謝,不知道。 – deviance

回答

0

不知道下面會有所幫助的話,至少你的要求的第二部分(從您的出生日期得到的天數爲當前日期):

該函數將返回從1900-1-1天數:

int countDaysFrom1900(int y, int m, int d) { 
    // The sum of days, equivalent to your msc array 
    int days[] = {0, 31, days[1] + 28, days[2] + 31, days[3] + 30, days[4] + 31, days[5] + 30, days[6] + 31, days[7] + 31, days[8] + 30, days[9] + 31, days[10] + 30, days[11] + 31}; 

    // Offset the day value if the year is a leap year 
    // The: "(!(y % 400) || ((y % 100) && !(y % 4)))" thing is checking the leap year 
    int offset = m > 2 && (!(y % 400) || ((y % 100) && !(y % 4))) ? 1 : 0; 

    // Calculate the number of transcurred days 
    return y -= 1901, ((y + 1) * 365 + (y/4) - (y/100) + ((y + 1900)/400) - 4 + days[m - 1] + offset + d - 1); 
} 

下面是一個使用例如:

int main() { 
    std::cout << countDaysFrom1900(1900, 1, 1) << std::endl; 
    std::cout << countDaysFrom1900(1900, 1, 2) << std::endl; 
    std::cout << countDaysFrom1900(1901, 1, 1) << std::endl; 
    std::cout << countDaysFrom1900(2013, 10, 13) << std::endl; 

    // Some birthdate 
    int daysFromBirthdate = countDaysFrom1900(1982, 4, 27); 
    int currentDate = countDaysFrom1900(2013, 10, 13); 

    std::cout << "There are " << (currentDate - daysFromBirthdate) << " days from birthdate" << std::endl; 
    return 0; 
} 

打印:

0 
1 
365 
41558 
There are 11492 days from birthdate 
+0

謝謝,有很多事情我並不在你的代碼理解(這是我的節目的第2天),但我還有幾天之前,我必須讓節目準備,所以我會看着辦吧。 – deviance