2012-11-24 169 views
1

輸入 - 年閏年FreePascal的

輸出 - 閏年

我已經試過

Program LeapYear; 

var 
    Year:Integer 

begin 

    writeln('Insert year'); 
    readln(Year) 

    if Year MOD 4 = 0 and Year MOD 100 = 0 and not Year MOD 400 = 0 then 
     begin 
      writeln(Year,'is leap year') 
     end 
    else 
     begin 
      writeln(Year,'is not leap year') 
     end 

end. 

但是,這是行不通的

+0

Grmpf。你能否認爲它以某種方式格式化和作爲代碼? (在代碼塊開頭使用換行符,然後在ech代碼行前面有4個空格,然後正確縮進) – pbhd

回答

3

你的算法是錯誤的。它應該是:

if (year mod 400 = 0) or ((year mod 4 = 0) and not (year mod 100 = 0)) 
+0

當我運行程序時,它給了我錯誤:不兼容的類型:得到「布爾」預計「LongInt」 –

+0

我添加了一些括號。再試一次? – melpomene

+0

非常感謝。這個算法正在工作。 –

3

IsLeapYear功能在datih.inc文件中已定義的,因此你不需要編寫你自己的版本,只有你必須添加sysutils單元。

+0

但它被宣佈爲單詞,所以它在將來幾年內都不起作用。或負數年份。 – BeniBela

+0

@BeniBela,你認爲你永遠需要確定65536之後的年數是否會飛躍:-)? [+1] – TLama

+0

@TLama:是的,最遲在63524年...我需要知道它的負面年,所以我實際上用整數重寫了所有的日期/時間函數(閏年很重要,如果你這樣做不知道閏年你不能做任何日期計算) – BeniBela