网站地图| 免费获取|
教育资料网
  • 网站首页|
  • 资料范文|
  • 修改降重|
  • 职称资料|
  • 合作期刊|
  • 资料下载|
  • 计算机资料|
  • 外文翻译|
  • 免费资料|
  • 原创资料|
  • 开题报告资料
搜索

当前位置:教育资料网 -> 免费资料 -> 电子资料 -> 免费资料论文--万年历设计(四)
自动化资料范文| 电子机电资料| 测控技术资料| 通信专业资料| 电气工程资料| 通信工程资料| 电子信息工程资料| 免费自动化资料| 免费电子资料| 免费电气资料| 免费通信资料

免费资料论文--万年历设计(四)

免费资料论文--万年历设计(四) 容易就可以从式(8)得到一个比公式(5)更简单的计算任意一天是星期几的公式:
 W = (4 - C mod 4) * 2 - 1 + (y-1) + [y/4] + [13 * (M+1) / 5] + d. (9)
 式中,y是年份的后两位数字。
 如果再考虑到取模运算不是四则运算,我们还可以把(4 - C mod 4) * 2进一步改写成只含四则运算的表达式。因为世纪数减一C除以4的商数q和余数r之间有如下关系:
 4q + r = C,
 其中r即是 C mod 4,因此,有:
 r = C - 4q
 = C - 4 * [C/4]. (10)
 则
 (4 - C mod 4) * 2 = (4 - C + 4 * [C/4]) * 2
 = 8 - 2C + 8 * [C/4]≡ [C/4] - 2C + 1 (mod 7). (11)
 把式(11)代入(9),得到:
 W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1. (12)
 这个公式由世纪数减一、年份末两位、月份和日数即可算出W,再除以7,得到的余数是几就表示这一天是星期几,唯一需要变通的是要把1月和2月当成上一年的13月和14月,C和y都按上一年的年份取值。因此,人们普遍认为这是计算任意一天是星期几的最好的公式。这个公式最早是由德国数学家克里斯蒂安·蔡勒(Christian Zeller, 1822- 1899)在1886年推导出的,因此通称为蔡勒公式(Zeller’s Formula)。为方便口算,式中的[13 * (M+1) / 5]也往往写成[26 * (M+1) / 10]。
 现在仍然让我们来算2004年5月1日的星期,显然C=20,y=4,M=5,d=1,代入蔡勒
 公式,有:
 W = [20/4] - 40 + 4 + 1 + [13 * (5+1) / 5] + 1 - 1
 = -15.
 注意负数不能按习惯的余数的概念求余数,只能按数论中的余数的定义求余。为了方便计算,我们可以给它加上一个7的整数倍,使它变为一个正数,比如加上70,得到55。再除以7,余6,说明这一天是星期六。这和实际是一致的,也和公式(2)计算所得的结果一致。
 最后需要说明的是,上面的公式都是基于公历(格里高利历)的置闰规则来考虑的。对于儒略历,蔡勒也推出了相应的公式是:
 W = 5 - C + y + [y/4] + [13 * (M+1) / 5] + d - 1. (13)
 ========================================
 (2005-10-20 22:25:00) --------(4575252)
 计算任何一天是星期几的几种算法近日在论坛上看到有人在问星期算法,特别整理了一下,这些算法都是从网上搜索而来,算法的实现是我在项目中写的。希望对大家有所帮助。
 1:常用公式
 W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D
 Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。
 2:蔡勒(Zeller)公式
 w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
 公式中的符号含义如下,w:星期;c:世纪;y:年(两位数); m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。相比于通用通用计算公式而言,蔡勒(Zeller)公式大大降低了计算的复杂度。
 3:对蔡勒(Zeller)公式的改进
 相比于另外一个通用通用计算公式而言,蔡勒(Zeller)公式大大降低了计算的复杂度。不过,笔者给出的通用计算公式似乎更加简洁(包括运算过程)。现将公式列于其下:
 W=[y/4]+r (y/7)-2r(c/4)+m’+d
 公式中的符号含义如下,r ( )代表取余,即只要余数部分;m’是m的修正数,现给出1至12月的修正数1’至12’如下:(1’,10’)=6;(2’,3’,11’)=2;(4’,7’)=5;5’=0;6’=3;8’=1;(9’,12’)=4(注意:在笔者给出的公式中,y为润年时1’=5;2’=1)。其他符号与蔡勒(Zeller)公式中的含义相同。
 4:基姆拉尔森计算公式
  W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
 在公式中d表示日期中的日数,m表示月份数,y表示年数。
 注意:在公式中有个与其他公式不同的地方:
 把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
8.测试结果
 通过纯DOS界面显示调试结果,可以显示公农历日期、星期、节气,天干地支。
测试结果图:

 

 

 

 

9.部分源代码
#include<iostream>
#include<iomanip>
#include<fstream>
#include<string>
using namespace std;
#define FIRSTYEAR 1936  /* 计算起点年*/
#define LASTYEAR  2031  /* 计算末点年*/
SolarShow(int ,int ,string);
week(int,int);
static int AccDays[2][15] ={{ 0,0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334,365,396},
{0, 0,31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366, 397}};
void main()
{  
 int Year;  //公历年
    int Month;//公历月
    int cCmd,c;
   char buf[80];
   string sFile="D:\\文件\\rili.txt";
begin:
cout<<"\n\n\t                    简易万年历\n\t=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*="; 
cout <<

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 4/8/8

免费资料论文--万年历设计(四)由教育资料网(www.jaoyuw.com)会员上传。
原创资料流程 相关资料
上一篇:免费资料论文--基于单片机的LED汉.. 下一篇:免费资料论文--点阵电子显示屏
推荐资料 本专业最新资料
Tags:免费 资料论文 --万年历 设计 2010-03-19 11:12:05【返回顶部】
精彩推荐
发表资料

联系方式 | 资料说明 | 网站地图 | 免费获取 | 钻石会员 | 硕士资料


教育资料网提供资料范文,资料代发,原创资料

本站部分文章来自网友投稿上传,如发现侵犯了您的版权,请联系指出,本站及时确认并删除  E-mail: 17304545@qq.com

Copyright@ 2009-2020 教育资料网 版权所有 湘ICP备19027999