C ++ Классы: Христианский Праздник Калькулятор ПОМОЩЬ - PullRequest
0 голосов
/ 17 мая 2011

По сути, я пытаюсь завершить этот экзаменационный вопрос для экзаменационной практики.Я знаю, как делать все, кроме последнего вопроса, делать с классами.Я вроде получаю их, но не знаю, как применить это к вопросу.Кто-нибудь может дать мне несколько отправных точек или советов (или даже возможных ответов) о том, как я буду создавать класс 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 - это день Пасхи в апреле, если: - результатом является 26 апреля, в этом случае вместо Пасхи - 19 апреля - результатом является 25 апреля, в этом случае Пасха - 18-го числа.Апрель, если d равно 28, а a больше 10

a) Реализуйте функцию C / C ++, для которой в качестве параметра указан год, и будет распечатываться дата пасхального праздника.(10 баллов) Другие христианские праздники можно рассчитать по дате Пасхи: Страстная пятница - пятница перед пасхальным воскресеньем.Вербное воскресенье - это воскресенье до Пасхи.В воскресенье это 7 недель после пасхального воскресенья.День вознесения за 10 дней до белого воскресенья.Примечание: апрель и июнь длится 30 дней, а март и май - 31 день.

б) Разработать / описать алгоритмы определения даты христианских праздников "Страстная пятница", "Вербное воскресенье", "Вознесение »и« Белое воскресенье ».(для этого ответа не требуется исходный код) (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 с прототипом double floor (double);

c) Создание класса C ++ для реализации калькулятора Christian Holiday.,Он должен иметь закрытые атрибуты (переменные-члены), представляющие день, месяц и год даты, и закрытый метод для вычисления терминов M и N. Конструктор по умолчанию должен установить все атрибуты на 0. Должно быть возможным изменить год, используяметод set () и извлечение дня и месяца с использованием методов get ().Класс также должен содержать методы вычисления для различных праздников - пример: computeEaster ().

Ответы [ 2 ]

0 голосов
/ 17 мая 2011

Итак, вы застряли на создании класса. Либо вы вообще не знаете, как создать класс , либо не знаете, как создать этот определенный класс.

Чтобы вообще создать класс, используйте ключевое слово class: class { int i; };. Если вы еще не создали какие-либо классы в C ++, вам, возможно, придется пересмотреть этот или другой класс программирования C ++.

Если вместо этого ваша проблема заключается в том, что вы не понимаете, как перевести дизайн класса вашего профессора в код C ++, то вы не так одиноки, как чувствуете. Переводить с неоднозначных английских утверждений о дизайне на конкретные программы на C ++ сложно, и это причина, по которой нам платят большие деньги.

Давайте пройдем по шагам.

Создание класса C ++ для реализации калькулятора Christian Holiday.

Звучит достаточно легко, не правда ли?

class ChristianHolidayCalculator {
};

Там этот шаг сделан!

Он должен иметь личные атрибуты (переменные-члены), представляющие день, месяц и год даты.

Знаете ли вы, что такое атрибуты или переменных-членов ? Вам нужно проверить указатель вашего учебника? Давай, я подожду. ... О, ты вернулся! Вы, должно быть, видели, что переменные-члены - это набор переменных, которые ограничены объявлением класса и которые возникают (как группа) при каждом создании объекта этого класса.

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

О, вы думали, что я назову их "год", "месяц" и "день"? Нет, это твоя домашняя работа, а не моя. Поскольку вы сказали нам, что знаете, как выполнять математику, я оставлю вам подробности.

и частный метод для вычисления слагаемых M и N.

Есть еще два словарных слова: метод и private . Просмотрите эти материалы курса для них.

Вы наверняка обнаружили, что метод является функцией внутри области действия class. Методы особенные в том, что они вызываются только по отношению к объектам данного класса.

Что касается "частного", я оставлю это вам. Конечно, вы узнали что-то о class в этом году?

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

Поскольку этот метод должен вычислять M и N, вам понадобится место для хранения результатов. Хм, может быть, вам нужно больше переменных-членов?

Наконец, ваш учитель упомянул методы 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() ... { ... }
};

Вот как вы запускаете для создания класса. Я надеюсь, что это даст толчок вам нужно, чтобы начать. Удачи на экзаменах.

0 голосов
/ 17 мая 2011

... как мне создать класс C ++?

Создать класс просто:

class foobar
{
public:
private:
};

Там! Теперь у вас есть класс Foobar. Этот класс может быть тем, кем вы хотите. Заполните общественные и частные разделы, если это необходимо.

Может ли кто-нибудь дать мне некоторые отправные точки или советы ...

Что касается того, как использовать классы для решения данной проблемы, вот общие шаги в приблизительно последовательном порядке:

  1. Определите требования к проблеме. Что нужно решить?
  2. Реформировать эти требования в виде перечня обязанностей. Что ваша программа должна сделать, чтобы выполнить эти требования?
  3. Сгруппируйте эти обязанности вместе, чтобы сформировать единый объект класса. Как этот объект класса способствует общему решению проблемы? Как этот объект будет фактически использоваться?
  4. Выразите и запишите это использование в модульном тесте для каждого из этих объектов. Делая это, вы можете притворяться, что этот класс уже реализован и доступны все необходимые вам функции-члены.
  5. Наконец, реализуйте этот класс, чтобы модульное тестирование прошло.

Последнее замечание, как уже отмечалось в комментарии Дэвида, копировать и вставлять дословную проблему в ваш вопрос - плохая идея. Люди будут (существенно) менее склонны читать это. Вы можете повысить вероятность ответа, если точно укажете, в чем проблема, и вырезали все несущественные части.

...