作者awer89 (Dolphin)
站内Fortran
标题Re: [问题] 请问一下有关万年历的东西
时间Tue Apr 14 19:03:27 2009
之前大一时留下的纪录
既然有人需要 就给个参考吧
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
1F:推 lrfnc:You are my hero!!..I love you!! 04/14 19:14
2F:推 flyuktw:I love you too! 06/13 00:02