2011-05-16 34 views
0

基本上,我試圖完成這種考試風格的考試練習題。我知道如何去做最後一個問題,而不是上課。我有點得到他們,但不知道如何將其應用於問題。任何人都可以給我一些關於如何創建一個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

回答

0

...我將如何去創建一個C++類?

創建一個類很簡單:

class foobar 
{ 
public: 
private: 
}; 

有!你現在有一個課foobar。該課程可以是任何你想要的。酌情填寫公共和私人部分。

任何人可以給我一些出發點或提示...

至於如何使用就如何解決特定的問題,這裏有大致順序的一般步驟類:

  1. 確定問題的要求。什麼需要解決?
  2. 將這些要求改爲一系列責任。您的計劃必須做什麼來滿足這些要求?
  3. 將這些責任組合在一起形成一個有凝聚力的類對象。這個類對象如何對問題的整體解決方案做出貢獻?這個對象將如何被實際使用?
  4. 在每個對象的單元測試中表達和捕獲該用法。在這樣做的時候,你可以假裝那個類已經實現了,並且你需要的任何成員函數都可用。
  5. 最後,執行該類,以便單元測試通過。

大衛的評論已經指出,最後一個注意事項是,將原始問題複製並粘貼到您的問題中是一個壞主意。人們將會(基本上)不太願意閱讀。如果您明確瞭解您遇到的問題並刪除所有不相關的部分,您可以增加回復的可能性。

0

所以,你堅持創建一個類。要麼你不知道如何創建一個類在所有的,或者你不知道如何創建這個特定的類。

要創建班級,請使用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