主题:今天星期几的问题??
lushoufa
[专家分:140] 发布于 2005-07-13 14:34:00
CLS
DIM a AS STRING
INPUT "a=xxxx/xx/xx"; a
DIM yue(1 TO 12) AS INTEGER
DIM zhong AS INTEGER
zhong = 0
n = VAL(MID$(a, 1, 4)):
FOR j = 1901 TO n - 1
IF n MOD 4 = 0 AND n MOD 100 <> 0 OR n MOD 400 = 0 THEN
FOR i = 1 TO 12
READ yue(i)
NEXT i
DATA 31,28,31,30,31,30,31,31,30,31,30,31
ELSE
FOR i = 1 TO 12
READ yue(i)
NEXT i
DATA 31,29,31,30,31,30,31,31,30,31,30,31
END IF
FOR i = 1 TO 12
zhong = zhong + yue(i)
NEXT i
NEXT j
y = VAL(MID$(a, 6, 2))
IF j = n THEN
IF n MOD 4 = 0 AND n MOD 100 <> 0 OR n MOD 400 = 0 THEN
FOR i = 1 TO y - 1
READ yue(i)
zhong = zhong + yue(i)
NEXT i
DATA 31,28,31,30,31,30,31,31,30,31,30,31
ELSE
FOR i = 1 TO y - 1
READ yue(i)
zhong = zhong + yue(i)
NEXT i
DATA 31,29,31,30,31,30,31,31,30,31,30,31
END IF
END IF
r = VAL(MID$(a, 9, 2))
zhong = zhong + r
PRINT "zhong="; zhong
x = zhong MOD 7
o = x + 1
IF o = 8 THEN
o = 1
PRINT o
ELSE
PRINT o
END IF
END
这个程序我老出错,能帮我看看[em8][color=FFFF00][/color]
回复列表 (共29个回复)
11 楼
飞鸟12 [专家分:2830] 发布于 2005-07-19 10:35:00
to moz:
算了 ,不过还是要说一下
你的程序 不是一下子就能看明白
...其实我也没看懂
12 楼
moz [专家分:37620] 发布于 2005-07-19 11:52:00
嘿嘿,那么飞鸟有试过吗?能不能找出错误来?
我这个函数的作用原来不是算星期几的,
是算某一日期是公元后第几天的,
要算星期几,就用这个day& mod 7 就可以了
0 就是星期天嘛
这个函数还可以计算两个日期间的距离的
参数格式,与DATE$同类型的字符串.不作排错处理
print "今天是星期";mid$("日一二三四五六",(Date2Number&(date$) mod 7)*2+1,2)
deflng a-z
FUNCTION Date2Number& (d$)
y = VAL(MID$(d$, 7, 4)) '[color=FF00FF]获得日期中的年份[/color]
m = VAL(d$) '[color=FF00FF]月份[/color]
d = VAL(MID$(d$, 4, 2)) '[color=FF00FF]日期[/color]
r = ((y MOD 4 = 0 AND y MOD 100 <> 0) OR (y MOD 400 = 0)) '[color=FF00FF]闰年判断[/color]
y = y - 1 '[color=FF00FF]因为不累计今年的原因,减少一年计算[/color]
Date2Number& = (y * 365 + y \ 4 - y \ 100 + y \ 400 + VAL(MID$(" 0 31 59 90120151181212243273304334", m * 3, 3)) + r * (m > 2) + d)
END FUNCTION
大家不明白的估计都是最后一行
y*365 每天大概多少天大家都知道的了
y\4 四年一闰得加上来多少天闰日
y\100 百年不闰
y\400 减了百年不闰,当然还得把四百年的加闰算回来
r*(m>2) 如果是闰年r=-1,二月之后(m>2)=-1就得加多一天了,
因为前面的算式是按365天的标准计算的
两个真值 -1 * -1 = 1 有一个条件不成立都为0
d 这是这个月的第几天当然得加到总数来了
最主要的来了
VAL(MID$(" 0 31 59 90120151181212243273304334", m * 3, 3))
val就不用说了
m是月份,*3是定位
如果是6月份,6*3=18,就从字符串中18的位置上取3个字符就是151
这个151是怎样算来的?
标准365天数:
1月份+2月份+3月份+4月份+5月份
31天+ 28天+ 31天+ 30天+31天 =151天
这样子不比你们老是喜欢用的 data + for 计算得少走回头路?
我就是拿365天标准年来把每个月前面的天数都数好算好了预置到这个字符串去,
要的时候就拿出来好了.
总结:
这一年前面有多少个标准年365天算进来
加上多少个闰日
这一月前面有多少天
是否要加上今年的闰日
今天多少号也要加进来
这不就得了?
是不是比你们写的都简洁快速?
当初我也怀疑会不会有错的,
呵呵,经常反复修改后就找不到错误来了.
因为我经常拿这个函数来计算我在世多少天了
print Date2Number&(date$)-Date2Number&(生日)
13 楼
lushoufa [专家分:140] 发布于 2005-07-20 08:48:00
爷爷分析的很仔细,我决定以后就跟爷爷混了,喜喜
14 楼
def [专家分:3380] 发布于 2005-07-23 02:20:00
moz - 魔爪,def - 得分
15 楼
def [专家分:3380] 发布于 2005-07-23 02:24:00
moz里面有
墨子
墨汁
末子
抹子
沫子
魔掌
魔杖
魔障
魔爪
魔怔
摹状
磨折
磨嘴
末座
def里只有
得分
得法
16 楼
spray [专家分:180] 发布于 2005-07-23 08:01:00
请教moz老师:
day& = (y * 365 + y \ 4 - y \ 100 + y \ 400 + VAL(MID$(" 0 31 59 90120151181212243273304334", m * 3, 3)) + r * (m > 2) + d)
这是您7-13 、7-19的语句,可是您5-28写的是... r * (y > 1)...,二者有何不同?是不是“ m > 2”说的是月份,“y > 1”说的是年,所以不同呢?我这个学生忒笨拙,脑筋反应慢,请别笑话啊。
17 楼
moz [专家分:37620] 发布于 2005-07-23 08:39:00
你很聪明,眼睛也很灵
那是我大意写错了的
18 楼
spray [专家分:180] 发布于 2005-07-23 19:54:00
别这么说,让人多不好意思呀!说得我都有点飘飘然了。我想象中“moz”好像神探“福尔摩斯”的尾音啊。
记得1973年我在北大荒教书,一个学生半开玩笑地叫我:“王老帅......”正好被他爸爸(连队指导员,抗美援朝志愿军战士)听见,非常生气,把他儿子好一顿批评:“老师就是老师,必须规规矩矩地叫,恭恭敬敬地叫,怎么能随随便便、想怎么叫就怎么叫呢,这还行了?”后来这个孩子哭鼻子抹泪地找我去了。
19 楼
moz [专家分:37620] 发布于 2005-07-24 14:06:00
我倒了
老老师您都一把胡子
还倒过来取笑我
20 楼
def [专家分:3380] 发布于 2005-07-24 21:42:00
人家是fulmoz,不是moz,人家是ful moz,你只是moz,你还能。。。
我来回复