回 帖 发 新 帖 刷新版面

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

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 楼

请教moz老师:
FUNCTION week% (d$)
y = VAL(MID$(d$, 7, 4))
m = VAL(d$)
d = VAL(MID$(d$, 4, 2))
这几句中都涉及字符串d$,可是字符串d$的表达式又在哪儿呢?我怎么找不到呢?请赐教。

22 楼

d$ 是形参,实参在WEEK%()函数的括号里。只要类型相同即可

23 楼

对不起moz,您太忙了,这个问题我替你回答了。不好意思呵

24 楼

拜托,你都一把年纪了,别再叫我老师了,
我虽然也曾有过当老师的机会,
可我的确没当过真正的教师,以后请别再这样叫了.

d$ 是与QB系统中date$同类型的字符串,
"mm-dd-yyyy"
函数里并没有特意检查其格式
省略了排错语句.

25 楼

原来如此,谢谢各位!能者为师,三人行,必有我师。你要是实在不愿意让人称老师,那我只好在心里叫了。
我觉得在论坛上也应该有一个良好的风气,别动不动挖苦、嘲笑、打击别人,这样不好。

26 楼

惭愧惭愧
失礼失礼
恕罪恕罪

27 楼

//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 楼

RickOne算星期的原理是一样的.

29 楼

魔爪就是强啊,佩服佩服

我来回复

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