OPTION BASE 0 FUNCTION IsLeapYear(y) !うるう年の判定 LET IsLeapYear=0 IF (MOD(y,4)=0 AND MOD(y,100)<>0) OR MOD(y,400)=0 THEN LET IsLeapYear=1 END IF END FUNCTION FUNCTION DateFrom111(y,m,d) !西暦1年1月1日から、第何日目 DIM Month(12) LET Month(1)=31 LET Month(2)=28 LET Month(3)=31 LET Month(4)=30 LET Month(5)=31 LET Month(6)=30 LET Month(7)=31 LET Month(8)=31 LET Month(9)=30 LET Month(10)=31 LET Month(11)=30 LET Month(12)=31 LET yy=y-1 LET aa=yy*365+INT(yy/4)-INT(yy/100)+INT(yy/400) FOR i=1 TO m-1 LET aa=aa+Month(i) NEXT i IF m>2 THEN LET aa=aa+IsLeapYear(y) LET aa=aa+d LET DateFrom111=aa END FUNCTION SUB Ymd(n,E,S,RM) !西暦第○日の西暦年月日を求める DIM Month(13) LET Month(0)=31 LET Month(1)=31 LET Month(2)=28 LET Month(3)=31 LET Month(4)=30 LET Month(5)=31 LET Month(6)=30 LET Month(7)=31 LET Month(8)=31 LET Month(9)=30 LET Month(10)=31 LET Month(11)=30 LET Month(12)=31 LET X=365*4+1 LET Y=X*24+365*4 LET Z=Y*4+1 LET Q=INT(n/Z) LET QM=MOD(n,Z) LET W=INT(QM/Y) LET WM=MOD(QM,Y) LET K=INT(WM/X) LET KM=MOD(WM,X) LET R=INT(KM/365) LET RM=MOD(KM,365) LET E=400*Q+100*W+4*K+R+1 LET S=0 IF (MOD(E,4)=0 AND MOD(E,100)<>0) OR MOD(E,400)=0 THEN LET Month(2)=29 DO WHILE RM=>0 LET S=S+1 LET RM=RM-Month(S) LOOP ELSE DO WHILE RM=>0 LET S=S+1 LET RM=RM-Month(S) LOOP END IF LET RM=RM+Month(S) IF RM=0 THEN IF S=1 THEN LET S=12 LET E=E-1 LET RM=Month(S) ELSEIF (MOD(E,4)=0 AND MOD(E,100)<>0) OR MOD(E,400)=0 AND S=3 THEN LET S=2 LET RM=29 ELSE LET S=S-1 LET RM=Month(S) END IF END IF END SUB DIM Youbi$(7) DATA 日,月,火,水,木,金,土 FOR i=0 TO 6 READ Youbi$(i) NEXT i PRINT INPUT PROMPT "基準になる西暦:年, 月, 日? ":h,f,g INPUT PROMPT "何日後? ":a PRINT LET b=DateFrom111(h,f,g) CALL Ymd(b+a,E,S,RM) LET YOU=MOD(b+a,7) PRINT " ";h;"年";f;"月";g;"日 から ";a;"日後は、" PRINT E;"年";S;"月";RM;"日 ";Youbi$(YOU);"曜日 です。" PRINT END