回 帖 发 新 帖 刷新版面

主题:今天星期几的问题??

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 楼

to moz:
算了 ,不过还是要说一下
你的程序 不是一下子就能看明白  
       ...其实我也没看懂

12 楼

嘿嘿,那么飞鸟有试过吗?能不能找出错误来?
我这个函数的作用原来不是算星期几的,
是算某一日期是公元后第几天的,
要算星期几,就用这个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 楼

爷爷分析的很仔细,我决定以后就跟爷爷混了,喜喜

14 楼

moz - 魔爪,def - 得分

15 楼

moz里面有
墨子
墨汁
末子
抹子
沫子
魔掌
魔杖
魔障
魔爪
魔怔
摹状
磨折
磨嘴
末座
def里只有
得分
得法

16 楼

请教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 楼

你很聪明,眼睛也很灵
那是我大意写错了的

18 楼

别这么说,让人多不好意思呀!说得我都有点飘飘然了。我想象中“moz”好像神探“福尔摩斯”的尾音啊。
记得1973年我在北大荒教书,一个学生半开玩笑地叫我:“王老帅......”正好被他爸爸(连队指导员,抗美援朝志愿军战士)听见,非常生气,把他儿子好一顿批评:“老师就是老师,必须规规矩矩地叫,恭恭敬敬地叫,怎么能随随便便、想怎么叫就怎么叫呢,这还行了?”后来这个孩子哭鼻子抹泪地找我去了。

19 楼

我倒了
老老师您都一把胡子
还倒过来取笑我

20 楼

人家是fulmoz,不是moz,人家是ful moz,你只是moz,你还能。。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册