Re: [問題] 請問一下有關萬年曆的東西
之前大一時留下的紀錄
既然有人需要 就給個參考吧
Program Calendar
!------------- [程式說明] -------------
!簡介: 萬年曆程式 (執行後在螢幕上提示使用者利用鍵盤輸入所需資料, 最後輸出結果)
!輸入: 1. 西元年份 (Year)
! 2. 月份 (Month)
!輸出: 西元 Year 年 Month 月之月曆
!
!------------- [變數宣告] -------------
IMPLICIT NONE
! ***** 資料 *****
INTEGER, DIMENSION(12) :: Days_of_Monthes = & ! 陣列: 每個月的天數
(/ 31,28,31,30,31,30,31,31,30,31,30,31 /)
! ***** 輸入 *****
INTEGER :: Year, Month ! 年份, 月份
! ***** 輸入 *****
CHARACTER(LEN=4), DIMENSION(31) :: Days ! 文字格式的日期 (長度皆為4個字元
)
CHARACTER(LEN=28) :: Title, Space, Bar ! 月曆標頭文字, 空白字串
! ***** 暫存 *****
INTEGER :: Day, Leap ! 星期幾, 閏年年數
INTEGER :: Sum_Of_Days, Last_Row ! 天數總和, 月曆最後一列之天數
INTEGER :: I ! 迴圈計數器
!------------- [設定變數初始值] -------------
Title = " SUN MON TUE WED THU FRI SAT"A
Bar = " ==========================="
Space = " "
! ***** 文字格式的日期 (Part III 用到) *****
Days(1) = " 1"
Days(2) = " 2"
Days(3) = " 3"
Days(4) = " 4"
Days(5) = " 5"
Days(6) = " 6"
Days(7) = " 7"
Days(8) = " 8"
Days(9) = " 9"
Days(10) = " 10"
Days(11) = " 11"
Days(12) = " 12"
Days(13) = " 13"
Days(14) = " 14"
Days(15) = " 15"
Days(16) = " 16"
Days(17) = " 17"
Days(18) = " 18"
Days(19) = " 19"
Days(20) = " 20"
Days(21) = " 21"
Days(22) = " 22"
Days(23) = " 23"
Days(24) = " 24"
Days(25) = " 25"
Days(26) = " 26"
Days(27) = " 27"
Days(28) = " 28"
Days(29) = " 29"
Days(30) = " 30"
Days(31) = " 31"
!------------- [程式開始] -------------
!------------- [ Part 0: 使用者輸入資料] -------------
WRITE(*,*) " "
WRITE(*,'(1X, A,$)') "請輸入年份 (西元): "
READ(*,*) Year
WRITE(*,'(1X, A,$)') "請輸入月份 (1~12): "
READ(*,*) Month
WRITE(*,*) " "
!------------- [ Part I: 閏年判斷] -------------
IF(MOD(Year,400)==0) Then
Days_of_Monthes(2)=29
ELSE IF(MOD(Year,4)==0.AND.MOD(Year,100)/=0) THEN
Days_of_Monthes(2)=29
END IF
!------------- [ Part II: 計算給定年份之元旦為星期幾] -------------
! ***** 前提: 西元元年(0001)的第一天是"星期一(Monday)" *****
Sum_Of_Days = 0
Year = Year - 1 ! 準備計算前 Year-1 年的總
天數
Leap = Year/4-Year/100+Year/400 ! 前 Year-1 年中, 閏年的年
數
Sum_Of_Days = 366*Leap + 365*(Year-Leap) ! 計算前 Year-1 年的總天數
DO I=1,Month-1
Sum_Of_Days = Sum_Of_Days + Days_of_Monthes(I) ! 加上第 Year 年的前
Month-1 月天數
END DO
Day = MOD(Sum_Of_Days+1,7) ! 求出 Year/Month 的 1 號
為星期幾
!------------- [ Part III: 輸出月曆] -------------
Year = Year + 1 ! 回復至使用者輸入的年份值
WRITE(*,*) " 西元",Year,"年",Month,"月"
WRITE(*,*) Bar
WRITE(*,*) Title
WRITE(*,*) Space(1:Day*4), Days(1:7-Day) ! 月曆的第一行只能再印出 7-Day 天
DO I=7-Day+1, Days_of_Monthes(Month), 7 ! 月曆第二行從 7-Day+1 日開始印,
每 7 天即換行
Last_Row = Days_of_Monthes(Month)-I
IF(Last_Row>=7) THEN ! 判斷最後一行是否小於 7 天
WRITE(*,*) Days(I:I+6) ! 1. 大於等於 7 天: 全部印出
ELSE ! 2. 小於七天: 印出剩餘天數
WRITE(*,*) Days(I:I+Last_Row)
END IF
END DO
WRITE(*,*) Bar
WRITE(*,*) " "
PAUSE
END PROGRAM
--
18173 12/09 - □ (本文已被吃掉) 吃光光,口卡口卡
18174 12/09 - □ (本文已被吃掉) ◤
18175 12/09 - □ (本文已被吃掉) ⊙ ⊙
18176 12/09 - □ (本文已被吃掉) ▼▼▼▼
18177 12/09 - □ (本文已被吃掉) ▲▲▲▲
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.42.214.194
推
04/14 19:14, , 1F
04/14 19:14, 1F
推
06/13 00:02, , 2F
06/13 00:02, 2F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
2
12
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章