2013-04-03 115 views
-1

我是初學者,我必須在SML中寫一個函數。如何確定一年的哪一天屬於哪個月?

分配問題是:

寫了一個名爲what_month函數,它每天的數量(如257,假設一年365天)作爲輸入,並返回月份的數字,即這一天屬於。

例如:what_month(40)應返回2(二月)。

+1

你知道該怎麼做嗎?一旦你找到了一個算法,它應該很容易轉換爲ML。 – molbdnilo

+0

我已經在.txt文件中編寫了算法,但我不知道如何在頁面中上傳它,請問我能指導我嗎? – Olivia

回答

0

很簡單的情況下(不考慮閏年),你可以定義的天在幾個月months_days列表,以及遞歸輔助函數aux,接受一個名爲intsum稱爲numbersint list,和返回一個intn,使列表中的第一個元素添加到小於sum,但列表中的第一個n + 1元素添加到sum或更多。

val month_days= [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 

fun what_month(day :int) = 
let 
    fun aux(sum :int, numbers: int list) = 
    let 
     val numbers_tail = tl numbers 
    in 
     if sum <= (hd numbers) 
     then 1 
     else  
     1 + aux(sum, (hd numbers + hd numbers_tail)::(tl numbers_tail)) 
    end 
in 
    aux(day, month_days) 
end 
+0

它的工作原理...非常感謝塔爾薩拉。 – Olivia

+0

我還有一個問題,Tarrsalah,我想你可以幫助我,所以只需檢查一下,我等待,再次感謝 – Olivia

0

這樣做的一種方法可能是創建一個每月有多少天的列表。

這樣一份名單看起來是這樣的

days_in_month = [31, 28, 31, 30, ...] 

然後,你可以根據每個月有多少天有輕鬆倒計時你輸入號碼。當您的號碼小於下個月的天數時,輸入號碼必須屬於您到達的月份。

請注意,這不包括閏年。但是如果需要的話,那也不應該難以實現。

+0

我沒有看到你的評論。 –

+0

我解決了這個函數的問題,謝謝Jesper,你的解決方案很有用。我還有一個問題,只是檢查並幫助我,如果可能的話,再次感謝 – Olivia

相關問題