Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

計算有幾個黑色星期五(VB)

0 views
Skip to first unread message

與可樂為好友

unread,
Dec 12, 2002, 8:09:37 AM12/12/02
to
如果讓你輸入西元哪一年到哪一年(21世紀的 2001~2100)
讓電腦算出有幾個黑色星期五
首先我們知道2001年1月1號 星期一
閏年(2月 有29天)為4的倍數,但不為100的倍數
但如果為4的倍數,也為400的倍數 ,也是閏年

知道這些資料
要怎麼寫程式
我一點頭緒都沒有
能幫幫忙嗎~

^^
ps.答案是172嗎
我亂作一個出來 答案是172不知道是不是
但是用很投機的方法
也就是 只要那個月的1號是星期日
13號就會是黑色星期五
不知道對不隊
--
[1;31mO [1;32mr [1;33mi [1;34mg [1;35mi [1;36mn [1;31m: [1;36m<不良牛牧場> [1;33mzoo.ee.ntu.edu.tw [1;32m(140.112.18.36) [m
[1;32mWelcome to SimFarm BBS [1;36m-- [m [1;31mFrom : [ [m210.240.197.118 [1;31m] [m

與可樂為好友

unread,
Dec 12, 2002, 8:14:50 AM12/12/02
to
※ 引述《sammigirl (與可樂為好友)》之銘言:
: 如果讓你輸入西元哪一年到哪一年(21世紀的 2001~2100)

: 讓電腦算出有幾個黑色星期五
: 首先我們知道2001年1月1號 星期一
: 閏年(2月 有29天)為4的倍數,但不為100的倍數
: 但如果為4的倍數,也為400的倍數 ,也是閏年
: 知道這些資料
: 要怎麼寫程式
: 我一點頭緒都沒有
: 能幫幫忙嗎~
: ^^
: ps.答案是172嗎
: 我亂作一個出來 答案是172不知道是不是
: 但是用很投機的方法
: 也就是 只要那個月的1號是星期日
: 13號就會是黑色星期五
: 不知道對不隊
172這個答案是我做2001~2100年總共的次數
但希望可以在更進階 可以是有空格(兩個 哪一年到哪一年)能輸入西元幾年
算出幾個黑色星期五

我現在的程式
Dim a
Private Sub Form_Activate()
For i = 2001 To 2100
For j = 1 To 12
b = getWeekday(i, j)
If b = 1 Then
a = a + 1
End If
Next j
Next i
Print "21世紀有"; a; "個黑色星期五"
End Sub

Private Sub Form_Load()
a = 0
End Sub
Function getWeekday(pnYear, pnMonth)
getWeekday = Weekday(DateSerial(pnYear, pnMonth, 1))
End Function

小仲

unread,
Dec 12, 2002, 10:06:24 AM12/12/02
to
妳很厲害嘛
取日期我一時只想到像下面的笨方法 ^^||
If Weekday(CDate(Year & "/" & Month & "/" & 13)) = 6 Then

form_load裡的a=0不需要 自定function也可以省略
關於判斷式可以改成像下面這樣:
If Weekday(DateSerial(i, j, 13)) = 6 Then


a = a + 1
End If

剩下的對妳來說 應該不成問題了吧^^


※ 引述《sammig...@zoo.ee.ntu.edu.tw (與可樂為好友)》之銘言:

[1;32m┌───── [33m◆ [37mKKCITY [33m◆ [32m─────┐ [34m┐┌┐┐┌┐┌─┐┌┬┐┌┬┐┐ ┌ [m
[1;32m│ [31m bbs.kkcity.com.tw [32m│ [37m├┘┐├┘┐│ │ │ └┬┘ [m
[1;32m└── [34m《 [0;37mFrom:61.64.172.190 [1;34m》 [32m──┘ [36m┘ ┘┘ ┘└─┘└┴┘ ┴ ┴ [m

與可樂為好友

unread,
Dec 13, 2002, 12:16:51 AM12/13/02
to
※ 引述《tw...@kkcity.com.tw (小仲)》之銘言:
: 妳很厲害嘛

: 取日期我一時只想到像下面的笨方法 ^^||
: If Weekday(CDate(Year & "/" & Month & "/" & 13)) = 6 Then
: form_load裡的a=0不需要 自定function也可以省略
: 關於判斷式可以改成像下面這樣:
: If Weekday(DateSerial(i, j, 13)) = 6 Then
: a = a + 1
: End If
: 剩下的對妳來說 應該不成問題了吧^^
(謝謝你的幫忙唷 不過我只是一星期上兩個小時半的新手 這學期開始上的)

我現在作了
可以輸入幾年到幾年的
不知道對不對 哪些需要在改進?

(四個Command 三個文書盒)

' -->程式簡單說明<--
'整個程式 輸入的西元設計為1萬以下 因為現在也才西元2002年
'如果輸入的起始年代數字比終止年代數字大 則顯示-->起始、終止年代不正確

Dim n
Private Sub Command1_Click()
a = Val(Text1.Text)
b = Val(Text2.Text)
If a <= 10000 And b <= 10000 Then
If b >= a Then
For i = a To b Step 1


For j = 1 To 12

If Weekday(DateSerial(i, j, 13)) = 6 Then '判斷13號是否為星期五
n = n + 1


End If
Next j
Next i

Text3.Text = n
Else
MsgBox "起始、終止年代不正確", 48, "錯誤訊息"
End If
Else
MsgBox "起始、終止年代通常四位數或四位以下", 48, "錯誤訊息"
End If
End Sub

Private Sub Command2_Click()
Text1.Text = ""
Text2.Text = "" '按此鍵能重新輸入
End Sub

Private Sub Command3_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = "" '按此鍵能全部清除
End Sub

Private Sub Command4_Click()
End '按此鍵結束程式
End Sub

: ※ 引述《sammig...@zoo.ee.ntu.edu.tw (與可樂為好友)》之銘言:
: > 172這個答案是我做2001~2100年總共的次數


: > 但希望可以在更進階 可以是有空格(兩個 哪一年到哪一年)能輸入西元幾年
: > 算出幾個黑色星期五
: > 我現在的程式
: > Dim a
: > Private Sub Form_Activate()
: > For i = 2001 To 2100
: > For j = 1 To 12
: > b = getWeekday(i, j)
: > If b = 1 Then
: > a = a + 1
: > End If
: > Next j
: > Next i
: > Print "21世紀有"; a; "個黑色星期五"
: > End Sub
: > Private Sub Form_Load()
: > a = 0
: > End Sub
: > Function getWeekday(pnYear, pnMonth)
: > getWeekday = Weekday(DateSerial(pnYear, pnMonth, 1))
: > End Function
--

[1;31mO [1;32mr [1;33mi [1;34mg [1;35mi [1;36mn [1;31m: [1;36m<不良牛牧場> [1;33mzoo.ee.ntu.edu.tw [1;32m(140.112.18.36) [m

[1;32mWelcome to SimFarm BBS [1;36m-- [m [1;31mFrom : [ [mip197118.ntctc.edu.tw [1;31m] [m

小仲

unread,
Dec 13, 2002, 1:15:16 AM12/13/02
to

DateSerial中,年是從西元100~9999年,它對於一些此範圍外的數字,
會如下解釋:
00~29:2000~2029
30~99:1930~1999
-1~-1900:以2000來減所得到的值
不足-1900:錯誤
超過9999:錯誤
所以如輸入98~102 這時出來的年 會變的很奇怪...
另外要對會產生錯誤的情況作判斷 不要讓程式異常結束!

※ 引述《sammig...@zoo.ee.ntu.edu.tw (與可樂為好友)》之銘言:


> (謝謝你的幫忙唷 不過我只是一星期上兩個小時半的新手 這學期開始上的)
> 我現在作了
> 可以輸入幾年到幾年的
> 不知道對不對 哪些需要在改進?
> (四個Command 三個文書盒)
> ' -->程式簡單說明<--
> '整個程式 輸入的西元設計為1萬以下 因為現在也才西元2002年
> '如果輸入的起始年代數字比終止年代數字大 則顯示-->起始、終止年代不正確
> Dim n

^^^^^
這個要放在Command1_Click()裡面
> Private Sub Command1_Click()
dim n


> a = Val(Text1.Text)
> b = Val(Text2.Text)
> If a <= 10000 And b <= 10000 Then

10000會錯誤 所以「=」拿掉


> If b >= a Then

If a > 99 Xor b > 99 Then MsgBox "不可跨百", 48, "錯誤訊息": Exit Sub
If a < -1900 Then MsgBox "西元100年之前無法計算", 48, "錯誤訊息": Exit Sub
If a > 29 Xor b > 29 Then MsgBox "不可跨30", 48, "錯誤訊息": Exit Sub

--
[1;32m┌───── [33m◆ [37mKKCITY [33m◆ [32m─────┐ [34m┐┌┐┐┌┐┌─┐┌┬┐┌┬┐┐ ┌ [m
[1;32m│ [31m bbs.kkcity.com.tw [32m│ [37m├┘┐├┘┐│ │ │ └┬┘ [m

[1;32m└── [34m《 [0;37mFrom:61.64.173.42 [1;34m》 [32m──┘ [36m┘ ┘┘ ┘└─┘└┴┘ ┴ ┴ [m

0 new messages