#define global ctype leapchk(%1 = 1900) ((%1 \ 400 = 0) | ((%1 \ 4 = 0) & (%1 \ 100 ! 0)))
#module
#deffunc dateinit int , int, int
mref year, 0 : mref month, 1 : mref day, 2
days = 365, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
kijun = year, month, day
if year = 0 : kijun = 1900
return
#deffunc getlastday int, int
if kijun = 0 : dateinit
mref year, 0 : mref month, 1
mref stt, 64
stt = (month = 2) * leapchk(year) + days.month
return
#deffunc getdays int , int, int
if kijun = 0 : dateinit
mref year, 0 : mref month, 1 : mref day, 2
mref stt, 64
i = 0
if year - kijun < 0 {
repeat kijun - year, year : i -= days + leapchk(cnt) : loop
if kijun.1 > 2 & leapchk(kijun) = 1 : i--
} else {
repeat year - kijun, kijun : i += days + leapchk(cnt) : loop
if kijun.1 > 2 & leapchk(kijun) = 1 : i--
}
if month - kijun.1 < 0 {
repeat kijun.1 - month, month : j = cnt \ 12 : i -= days.j : loop
if month > 2 & leapchk(year) = 1 : i++
} else {
repeat month - kijun.1, kijun.1 : j = cnt \ 12 : i += days.j : loop
if month > 2 & leapchk(year) = 1 : i++
}
stt = i + (day - kijun.2)
return
#global
randomize
dim date, 6
repeat 20
if cnt \ 4 = 0 {
date.0 = 2004
rnd date.1, 12 : date.1++
getlastday date.0, date.1 : rnd date.2, stat : date.2++
dateinit date.0, date.1, date.2
}
date.3 = 2004
rnd date.4, 12 : date.4++
getlastday date.3, date.4 : rnd date.5, stat : date.5++
getdays date.3, date.4, date.5
pos 10, cnt * 20 + 10 : mes "" + date.0 + "/" + date.1 + "/" + date.2
pos 90, cnt * 20 + 10 : mes "を基準とした "
pos 200, cnt * 20 + 10 : mes "" + date.3 + "/" + date.4 + "/" + date.5
pos 290, cnt * 20 + 10 : mes "までの日数は"
pos 400, cnt * 20 + 10 : mes stat
loop
stop
|