C++类:基督教假期计算器

C++ Classes: Christian Holiday Calculator

本文关键字:假期 计算器 基督教 C++      更新时间:2023-10-16

基本上,我正在尝试完成这个考试风格的问题以进行考试练习。我知道如何做所有事情,除了最后一个问题,与课程有关。我有点明白,但不知道如何将其应用于这个问题。谁能给我一些起点或提示(甚至可能的答案)来说明我将如何创建一个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,则此总和是 3 月复活节假期的日子。否则 d+e-9 是四月的复活节,除非:- 结果是 4 月 26 日,在这种情况下,复活节是在 4 月 19 日。- 结果是 4 月 25 日,在这种情况下,如果 d 是 28 并且a 大于 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

floor 函数向下舍入一个值 – 在数学库中 math.h 中,这是可作为C功能与原型双地板(双);

c) 生成一个C++类来实现基督教节日计算器。它应具有表示日期的日、月和年以及用于计算项 M 和 N。默认构造函数应设置所有属性均为 0。应该可以使用set() 方法并使用 get() 方法检索日和月。该类还应包含不同假期 – 示例:计算复活节()。

。我将如何创建一个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,因此您需要某个地方来存储结果。嗯,也许你需要更多的成员变量?

最后,你的老师提到了set()、get()和compute()方法。这是他告诉你要创建哪些公共方法的速记方式。他可能不是字面上的意思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() ... { ... }
};

您可以开始创建类。我希望这能为您提供入门所需的动力。祝你考试顺利。