我正在编写一个程序,该程序以 MM DD YYYY 的格式读取日期,并输出该日期是星期几。这是实际的问题(我知道这很长,但是可能会帮助解决我的问题):
编写一个程序,确定给定日期的星期几。您 可以发明自己的复杂算法,并考虑到特殊情况 year年规则,以及日历的更改,但是在这种情况下, 寻找熟悉的事物的感觉。还有谁可能需要计算 时间跨度较大的日期值?历史学家处理日期,但是 通常不根据它们进行计算。但是,天文学家需要知道 太阳系中跨越轨道的事件之间的时间差 数百年。查阅天文学,您会发现其中有一个 日期的标准表示方式,称为儒略日数(JDN)。 此值是公元前4713年1月1日以来经过的天数。 给定一个日期的JDN,有一个简单的公式可以说明日期 周:
DayOfWeek =(JDN + 1)%7
结果在0到6的范围内,0代表星期日。
唯一剩下的问题是如何计算JDN,事实并非如此。 简单。该算法计算添加的几个中间结果 一起给JDN。我们来看一下这三个的计算 中间值。
如果该日期来自公历(晚于10月15日, 1582),然后使用以下公式计算intRes1;否则,让 intRes1为零。
intRes1 = 2 –年/ 100 +年/ 400(整数除法)
第二个中间结果计算如下:
intRes2 = static_cast(365.25 *年)
我们使用以下公式计算第三个中间值:
intRes3 = static_cast(30.6001 *(月+1))
最后,JDN的计算方式如下:
JDN = intRes1 + intRes2 + intRes3 +天+ 1720994.5
您的程序应在以下程序中适当使用返回值功能 解决这个问题。这些公式需要九位有效数字;你可以 必须使用整型long和浮点型double。您的 程序应适当提示用户输入日期;这应该 还要正确标记输出。使用适当的编码风格并添加注释以 记录所需的算法。
您的程序将从文件中读取。该文件包含以下格式的日期: mm dd yyyy
我尝试将if(DayOfWeek =)语句更改为if语句,最终语句为else,但是无论日期如何,它都只会输出“ Monday”。
int main() {
int JDN = 0;
int DayOfWeek = 0;
int res1 = 0;
int res2 = 0;
int res3 = 0;
int day = 0;
int month = 0;
int year = 0;
string final;
ifstream inData;
string file;
cout << "Enter File Name: ";
cin >> file;
try {
inData.open(file.c_str());
}
catch (int e) {
return -1;
}
if (inData.is_open()) {
inData >> month;
inData >> day;
inData >> year;
if (month > 10 && day > 15 && year > 1582) {
res1 = 2 - year / 100 + year / 400;
}
else {
res1 = 0;
}
res2 = static_cast<int>(365.25 * year);
res3 = static_cast<int>(30.6001 * (month + 1));
JDN = res1 + res2 + res3 + day + 1720994.5;
DayOfWeek = (JDN + 1) % 7;
if (DayOfWeek = 0) {
cout << "Sunday";
}
if (DayOfWeek = 1) {
cout << "Monday";
}
if (DayOfWeek = 2) {
cout << "Tuesday";
}
if (DayOfWeek = 3) {
cout << "Wednesday";
}
if (DayOfWeek = 4) {
cout << "Thursday";
}
if (DayOfWeek = 5) {
cout << "Friday";
}
if (DayOfWeek = 6) {
cout << "Saturday";
}
}
else {
cout << "File Not Found";
}
return 0;
}
该程序在一周中的每一天只应输出一行,因此每天只输出一行。我怎么了?
答案 0 :(得分:1)
比较为“ ==”; “ =“是作业。
您应该一直在收到编译器警告,请仔细检查输出。