C++类:基督教节假日计算器帮助

问题描述:

基本上,我试图完成这种考试风格的考试练习题。我知道如何去做最后一个问题,而不是上课。我有点得到他们,但不知道如何将其应用于问题。任何人都可以给我一些关于如何创建一个C++类的起点或提示(或甚至可能的答案)?任何帮助深表感谢。问题在下面。道歉多久。C++类:基督教节假日计算器帮助

在1800数学家卡尔·弗里德里希·高斯提出的算法计算复活节假期的新公历 日期( 年1752在大英帝国介绍)。对于这种需要数量的表达式来进行评估: 两个术语M和N,这对于给定的y年保存值:

year  M N 
1700-1799 23 3 
1800-1899 23 4 
1900-2099 24 5 
2100-2199 24 6 
The expressions are: 
a = y mod 19 
b = y mod 4 
c = y mod 7 
d = (19a + M) mod 30 
e = (2b + 4c + 6d + N) mod 7 

如果22 + d + e为小于32比这个总和是三月的复活节假期。 否则d + e-9是4月复活节的日子,除非: - 结果是4月26日,在这种情况下,复活节是在4月19日而不是 - 结果是4月25日,在这种情况下,复活节开启四月18日当d是28和 一个大于10

a)实施,鉴于一年作为参数的C/C++函数将 打印出来的复活节假期的日期。 (10分) 其他基督教节日可以从复活节日期算起: 耶稣受难日是复活节前的星期五。 棕榈星期日是复活节前的星期日。 惠特周日是复活节后的7周。升天日在惠特星期日前10天。 注意:4月和6月长30天,而3月和5月长31天。

b)设计/描述算法,用于识别假期“耶稣受难日”,“棕榈星期天”,“升天”和“星期日”的假期的基督徒的日期 。 (没有源代码需要此答案)(15分)

在由高斯描述的复活节计算算法术语M和N也 可以使用下面的表达式计算:

k = floor(y/100) 
p = floor((13 + 8k)/25) 
q = floor(k/4) 
M = (15 − p + k − q) mod 30 
N = (4 + k − q) mod 7 

地板函数向下舍入一个值 - 在数学库math.h中,这是 作为一个C函数与原型double floor(double)一起提供;

c)生成一个C++类来实现基督教节假日计算器。它 应该具有代表日期的 日,月和年的私有属性(成员变量),以及用于计算条款M和N的私有方法 。默认构造函数应将所有属性设置为 。它应该是可能的使用 set()方法更改年份,并使用get()方法检索日期和月份。 该类还应包含针对不同假期的计算方法 - 例如:computeEaster()。

+6

要了解如何创建C++类,请阅读C++有关类的书中的章节! – 2011-05-16 20:58:40

+3

只有当你期望我们中的一个人完成你的任务时,才能给我们确切的复活节算法。我们不是。如果你在一个C++类中,并且你不知道如何为一个任务创建一个类,那么无论你是否有一个可怕的老师,或者你还没有学会你应该做什么。实施你能做的事,在课堂上学习,如果你在这里发布具体问题。 – 2011-05-16 21:04:56

...我将如何去创建一个C++类?

创建一个类很简单:

class foobar 
{ 
public: 
private: 
}; 

有!你现在有一个课foobar。该课程可以是任何你想要的。酌情填写公共和私人部分。

任何人可以给我一些出发点或提示...

至于如何使用就如何解决特定的问题,这里有大致顺序的一般步骤类:

  1. 确定问题的要求。什么需要解决?
  2. 将这些要求改为一系列责任。您的计划必须做什么来满足这些要求?
  3. 将这些责任组合在一起形成一个有凝聚力的类对象。这个类对象如何对问题的整体解决方案做出贡献?这个对象将如何被实际使用?
  4. 在每个对象的单元测试中表达和捕获该用法。在这样做的时候,你可以假装那个类已经实现了,并且你需要的任何成员函数都可用。
  5. 最后,执行该类,以便单元测试通过。

大卫的评论已经指出,最后一个注意事项是,将原始问题复制并粘贴到您的问题中是一个坏主意。人们将会(基本上)不太愿意阅读。如果您明确了解您遇到的问题并删除所有不相关的部分,您可以增加回复的可能性。

所以,你坚持创建一个类。要么你不知道如何创建一个类在所有的,或者你不知道如何创建这个特定的类。

要创建班级,请使用class关键字:class { int i; };。如果你还没有用C++创建任何类,那么你可能需要重新编写这个或另一个C++编程类。

如果你的问题是你不懂如何将你的教授的课程设计转换成C++代码,那么你并不像你想象的那么孤单。从不明确的英文设计陈述转换到具体的C++程序是很困难的,也是我们得到大笔资金的原因。

让我们一步一步通读它。

生成一个C++类来实现基督教节假日计算器。

听起来很简单,不是吗?

class ChristianHolidayCalculator { 
}; 

在那里,那一步就完成了!

它应该有私有属性(成员变量),代表

你知道什么属性成员变量是日期的日,月,年?你需要检查教科书的索引吗?继续,我会等。 ...哦,你回来了!您一定已经看到成员变量是一组变量,这些变量的范围由类声明确定,并且每次创建该类的对象时会弹出(作为一个组)。

class ChristianHolidayCalculator { 
    double width; 
    double height; 
    double depth; 
}; 

哦,你以为我会给他们命名为“年”,“月”和“日”吗?不,那是你的作业,不是我的。既然你告诉我们你知道如何做数学,我会把具体细节留给你。

和用于计算的条款M和N的私有方法

还有两个词汇:方法私人。去审查你的课程材料。

您肯定发现方法是class范围内的函数。方法的特殊之处在于,它们仅在与手头类的对象相关时才被调用。

至于“私人”,好吧,我会把它留给你。你今年肯定学到了一些关于class的东西吗?

class ChristianHolidayCalculator { 
    double width; 
    double height; 
    double depth; 
    void GuitarTune() { 
     // Code to tighten strings goes here. 
    } 
}; 

因为这种方法具有计算MN,你需要在某处储存结果。嗯,也许你需要更多的成员变量?

最后,你的老师提到集()的get()计算()方法。这是他告诉你哪些公共方法可以创建的速记方式。他大概不是字面意思int get() { ... }。他可能意味着你需要创建一个组的方法,在名称中的所有相似和设计:

class ChristianHolidayCalculator { 
    double width; 
    double height; 
    double depth; 
    void GuitarTune() { 
     // Code to tighten strings goes here. 
    } 
    int getRed() { /* return red value */ } 
    int getGreen() { /* return green value */ } 
    int getBlue() { /* return blue value */ } 
    void setRed(int newRed) { /* assign red value */ } 
    void setGreen(int newGreen) { /* guess */ } 
    ... calculateEaster() ... { ... } 
}; 

有你如何开始创建类。我希望这可以推动你开始所需的努力。祝你考试顺利。

+0

哇,谢谢。您的字面意思是您付出努力的传奇。非常感谢! – 2011-05-18 07:12:25