2010年1月27日 星期三

2010/01/27 年曆轉換

由"in.txt"讀取一正整數N,印出生肖及天干地支。(一甲子為60年)

輸入範例:

2000

輸出範例:

豬辛亥

出自  程式設計隊訓練教材  NO.19  年曆轉換

10 則留言:

  1. Private Sub Form_Load()
    Open App.Path & "/in.txt" For Input As #1
    Input #1, n
    Close #1
    Select Case n Mod 10
    Case 0
    ans = "辛"
    Case 1
    ans = "壬"
    Case 2
    ans = "癸"
    Case 3
    ans = "甲"
    Case 4
    ans = "乙"
    Case 5
    ans = "丙"
    Case 6
    ans = "丁"
    Case 7
    ans = "戊"
    Case 8
    ans = "己"
    Case 9
    ans = "庚"
    End Select
    Select Case n Mod 12
    Case 1
    ans = "龍" & ans
    ans = ans & "辰"
    Case 2
    ans = "蛇" & ans
    ans = ans & "巳"
    Case 3
    ans = "馬" & ans
    ans = ans & "午"
    Case 4
    ans = "羊" & ans
    ans = ans & "未"
    Case 5
    ans = "猴" & ans
    ans = ans & "申"
    Case 6
    ans = "雞" & ans
    ans = ans & "酉"
    Case 7
    ans = "狗" & ans
    ans = ans & "戌"
    Case 8
    ans = "豬" & ans
    ans = ans & "亥"
    Case 9
    ans = "鼠" & ans
    ans = ans & "子"
    Case 10
    ans = "牛" & ans
    ans = ans & "丑"
    Case 11
    ans = "虎" & ans
    ans = ans & "寅"
    Case 0
    ans = "兔" & ans
    ans = ans & "卯"
    End Select
    Open App.Path & "/out.txt" For Output As #2
    Print #2, ans
    Close #2
    End Sub
    感覺 就是 很笨的方法這樣...

    回覆刪除
  2. Private Sub Form_Load()

    Open App.Path & "\in.txt" For Input As #1
    Input #1, n
    Close #1

    yaer1 = "兔龍蛇馬羊猴雞狗豬鼠牛虎"
    year2 = "辛壬癸甲乙丙丁戊己庚"
    year3 = "卯辰巳午未申酉戌亥子丑寅"

    Open App.Path & "\out.txt" For Output As #2
    x = n Mod 10
    y = n Mod 12
    ans = Mid(yaer1, y + 1, 1) & Mid(year2, x + 1, 1) & Mid(year3, y + 1, 1)
    Print #2, ans
    Close #2

    End Sub

    回覆刪除
  3. 還要推算一下0年的時候是什麼年當初始質@@

    回覆刪除
  4. 上面的範例答案好像錯了@@
    Private Sub Form_Load()
    Dim ans As String
    txt = "雞狗豬鼠牛虎兔龍蛇馬羊猴"
    txt1 = "甲乙丙丁戊己庚辛壬癸"
    txt2 = "子丑寅卯辰巳午未申酉戌亥"
    Open App.Path & "\in.txt" For Input As #1
    Input #1, x
    Close #1
    Select Case x
    Case Is >= 0
    ans = Mid(txt, x Mod 12, 1)
    ans = ans & Mid(txt1, ((x - 3) Mod 10), 1)
    ans = ans & Mid(txt2, ((x - 3) Mod 12), 1)
    End Select
    Open App.Path & "\in.txt" For Input As #1
    Print #1, ans
    Close #1
    End Sub

    回覆刪除
  5. 阿瑋好,
    你的方式,高。值得學習。
    不過,我手邊沒有參考答案,並不知道你程式出來的答案是對或不對。
    要多試幾組看看答案對不對。


    高仔好,
    就學阿瑋的方式吧。不過,當然,第一次先自己可以做出來,才是王道。做了之後,再去看別人比我好還是不好,學好的。


    Y揚好,
    你的程式也應該可以執行,只是,
    只有一個選項的select case,還不如直接用if。
    加油,還是希望全部的儲備選手都能來做作業哦。

    回覆刪除
  6. 老師 用select case 是因為 要判斷西元前XXX 用的

    不過 不知道怎嚜判定@@所以 只做這樣@@

    回覆刪除
  7. Y揚好,
    反正你那邊沒有寫別的選項,就用
    if x >=0 then
    ...
    end if
    而你想要解決西元前的問題的話,
    西元1年,餘數為1
    西元前1年,如果用-1來輸入的話,
    只要在算餘數之前,先用個條件迴圈將它被成正數就好了。
    do until x >=0
    x = x +120
    loop
    好險哦,本來想說x = x+12但是發現,還有個取10的餘數的,於是想到加個120,讓它們的餘數值不會改變。去試試吧,(因為,再說一次,我這兒沒有windows系統,所以,也沒有準備visual Basic 6,哈哈,怎麼說也是渡假滑雪中吧。)

    回覆刪除
  8. 輸入範例:

    2000

    輸出範例:

    豬辛亥

    看這個範例2000年應該不是指西元2000年
    西元2000年可是『龍』年欸= ="
    所以應該可以不用考慮有沒有西元前吧@@

    回覆刪除
  9. 恩 查了一下 西元2000年
    是為 龍庚辰
    並不如試題答案那樣
    我也是以試題為基準 (汗
    後面類似的題型我會注意查證的 >"<

    回覆刪除
  10. Private Sub Form_Load()
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Y1 = "鼠牛虎兔龍蛇馬羊猴雞狗豬"
    Y2 = "庚辛壬癸甲乙丙丁戊己"
    Y3 = "子丑寅卯辰巳午未申酉戌亥"
    Input #1, x
    q = x Mod 12
    w = x Mod 10
    Print #2, Mid(Y1, q - 3, 1) & Mid(Y2, w + 1, 1) & Mid(Y3, q - 3, 1)
    Print ans
    Close #1
    Close #2
    End Sub

    回覆刪除