Fortran 萬年曆程式 哪裡有錯??

請問這樣的萬年曆哪邊有錯呢? 可以幫我改一下嗎?? 謝謝! > < 主要是月曆第一行的空格數出問題, 執行出來的是依據"年"來空格, 如果是西元1年就空一格.西元2年就空兩格.....(不管月份) 要怎麼修改呢? p.s這裡是設定西元1年的第一天是星期一, 那如果要修改為西元1900年1月1日為星期一 呢? 拜託拜託~ 謝謝!! program Console4 implicit none integer,dimension(12)::day_of_months=(/31,28,31,30,31,30,31,31,30,31,30,31/),sum_of_months ... show more 請問這樣的萬年曆哪邊有錯呢?
可以幫我改一下嗎??
謝謝! > <

主要是月曆第一行的空格數出問題,
執行出來的是依據"年"來空格,
如果是西元1年就空一格.西元2年就空兩格.....(不管月份)
要怎麼修改呢?

p.s這裡是設定西元1年的第一天是星期一,
那如果要修改為西元1900年1月1日為星期一 呢?

拜託拜託~ 謝謝!!


program Console4
implicit none
integer,dimension(12)::day_of_months=(/3...
integer::year,month
character(len=4),dimension(31)::days
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"
bar ="============================="
space=" "

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"


write(*,'(1x,A)')"請輸入年份(西元):"
read(*,*)year
write(*,'(1x,A)')"請輸入月份(1~12):"
read(*,*)month


if(mod(year,400)==0)then
day_of_months(2)=29
else if (mod(year,4)==0.and.mod(year,100)/=0)the...
day_of_months(2)=29

end if

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+sum_of_months(i... ! 加上第 Year 年的前Month-1 月天數

end do
day=mod(sum_of_days+1,7) ! 求出 Year/Month 的 1 號為星期幾
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,day_of_months(month),7 ! 月曆第二行從 7-Day+1 日開始印,每 7 天即換行
last_row=day_of_months(month)-i

if(last_row>=7)then ! 判斷最後一行是否小於 7 天
write(*,*)days(i:i+6) ! 1. 大於等於 7 天: 全部印出
else
write(*,*)days(i:i+last_row) ! 2. 小於七天: 印出剩餘天數
end if
end do

write(*,*)bar




end program Console4
1 answer 1