主题:今天星期几的问题??
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个回复)
21 楼
spray [专家分:180] 发布于 2005-07-24 21:43:00
请教moz老师:
FUNCTION week% (d$)
y = VAL(MID$(d$, 7, 4))
m = VAL(d$)
d = VAL(MID$(d$, 4, 2))
这几句中都涉及字符串d$,可是字符串d$的表达式又在哪儿呢?我怎么找不到呢?请赐教。
22 楼
咖啡猪 [专家分:290] 发布于 2005-07-24 22:53:00
d$ 是形参,实参在WEEK%()函数的括号里。只要类型相同即可
23 楼
咖啡猪 [专家分:290] 发布于 2005-07-24 22:56:00
对不起moz,您太忙了,这个问题我替你回答了。不好意思呵
24 楼
moz [专家分:37620] 发布于 2005-07-25 11:55:00
拜托,你都一把年纪了,别再叫我老师了,
我虽然也曾有过当老师的机会,
可我的确没当过真正的教师,以后请别再这样叫了.
d$ 是与QB系统中date$同类型的字符串,
"mm-dd-yyyy"
函数里并没有特意检查其格式
省略了排错语句.
25 楼
spray [专家分:180] 发布于 2005-07-26 05:47:00
原来如此,谢谢各位!能者为师,三人行,必有我师。你要是实在不愿意让人称老师,那我只好在心里叫了。
我觉得在论坛上也应该有一个良好的风气,别动不动挖苦、嘲笑、打击别人,这样不好。
26 楼
moz [专家分:37620] 发布于 2005-07-26 12:43:00
惭愧惭愧
失礼失礼
恕罪恕罪
27 楼
rickone [专家分:15390] 发布于 2005-09-29 11:50:00
//file:date.h
#include<iostream.h>
class date
{
public:
date(){year=month=day=leapyear=pastdays=week=-1;};
date(int y,int m,int d);
int getweek(){return week;};
friend bool operator<(date& dt1,date& dt2);
friend long leapyearsbetween(date dt1,date dt2);
friend ostream& operator<<(ostream& out,date& dt);
friend long operator-(date dt1,date dt2);
date& operator+=(int days);
protected:
int year,month,day;
int leapyear,pastdays,week;
};
//file:date.cpp
#include<iomanip.h>
#include "date.h"
date::date(int y,int m,int d)
{
static int
r1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},
r2[13]={0,0,3,3,6,1,4,6,2,5,0,3,5},
r3[13]={0,0,31,59,90,120,151,181,212,243,273,304,334};
int c;
if(y<0||m<1||m>12||d<1)
{
cerr<<"Wrong Date!"<<endl;
year=month=day=leapyear=pastdays=week=-1;
return;
}
if(y%4==0&&y%100!=0||y%400==0)leapyear=1;
else leapyear=0;
if(d>r1[m]+(m==2?leapyear:0))
{
cerr<<"Wrong Date!"<<endl;
year=month=day=leapyear=pastdays=week=-1;
return;
}
year=y;month=m;day=d;//日期数据约束条件
y%=400;
if(leapyear&&m<3)c=5;
else c=6;
week=(y+y/4-y/100+r2[m]+d+c)%7;
pastdays=r3[m]+d;
if(leapyear&&m>2)++pastdays;
}
……
算星期容易啊,按我的算法,只要这样就行了:
int week(int y,int m,int d)
{
static int r[13]={0,0,3,3,6,1,4,6,2,5,0,3,5};
int c,w;
y%=400;
if((y==0||y%4==0&&y%100!=0)&&m<3)c=5;
else c=6;
w=(y+y/4-y/100+r[m]+d+c)%7;
return w;
}
28 楼
moz [专家分:37620] 发布于 2008-01-08 21:46:00
RickOne算星期的原理是一样的.
29 楼
强强 [专家分:4740] 发布于 2008-01-09 18:36:00
魔爪就是强啊,佩服佩服
我来回复