0

I want to create a program that will calculate the day easter will be on. The user will type in a year and then the program should calculate the day easter will be on. I'm having trouble understanding the if/else and how i can use that with the code

// EasterProject
#include<iostream>
    using namespace std;
int main()
{ 
    int intyear, int intEasterDate, int intEasterMonth;
    int a, b, c, d, e, f, g, h, i, j, k, m, p;

cout<< "What's the year? \n";
    cin>> intyear;

Cout<<"Easter Month is \n";

if (intyear<0001||intyear>5000)
    {cout<<"This calculator cannot serve you\n"
    return -1;}
a=intyear%19;
b=intyear/100;
c=intyear%100;
d=b/4;
e=b%4;
f=(b+8)/25;
g=(b-f+1)/3;
h=((19*a)+b-d-g+15)%30;
i=c/4;
j=c%4;
k=(32+(2*e)+(2*i)-h-j)%7
m=(a+(11*h)+(22*k))/451
intEasterMonth=(h+k-(7*m)+114)/31
p=(h+k-(7*m)+114)%31
intEasterDate=p+1;


return 0;
}

Edited by joester007

5
Contributors
7
Replies
54
Views
3 Years
Discussion Span
Last Post by AndrisP
Featured Replies
  • 1
    ddanbe 2,525   3 Years Ago

    Did you mean something like this? if (year not ok) { cout wrong year message return -1; } else { do easter calculation return 0; } Read More

  • I solved your project syntax, but alghoritm not correct // EasterProject #include<iostream> using namespace std; int main() { int intyear, intEasterDate, intEasterMonth; int a, b, c, d, e, f, g, h, i, j, k, m, p; do { cout<< "What's the year? \n"; cin>> intyear; cout<<"Easter Month is \n"; if … Read More

  • 1

    I have a working algorithm, but it is in Python. You should be able to apply it to C++ code. Note: In Python // is an integer division. See: http://www.daniweb.com/software-development/python/threads/20774/starting-python/19#post2017691 Read More

  • 1
    ddanbe 2,525   3 Years Ago

    I have a working algorithm, but it is in C#. You should be able to apply it to C++ code. Note: In C# / is an integer division if used with integers. 3 / 2 will give 1. 3.0 / 2 will give 1.5 See: http://www.daniweb.com/software-development/csharp/code/217161/determine-easter-for-a-given-year Read More

  • ddanbe, I compared to a built-in PHP function "easter_date()" and adjust alghoritm to C++ #include <iostream> using namespace std; void EasterDate(int Year) { // Gauss Calculation //////////////////// int Month = 3; // Determine the Golden number: int G = Year % 19 + 1; // Determine the century number: int … Read More

  • Hi, you are about to implement the famous Meeus/Jones/Butcher algorithm in c++. Among others, this algorithm, also called "The anonymous Gregorian algorithm", can be found on [Click Here](http://en.wikipedia.org/wiki/Computus). Unfortunately, you didn't correctly translate the floor function, for example b = floor (Y / 100) of MJB algorithm. floor(x) returns the … Read More

  • I checked again, but PHP generated dates are not always on Sunday - so wrong! This works in C++ and it seems that the correct: #include <sstream> #include <iostream> using namespace std; string ZeroPadNumber(int num){ stringstream ss; // the number is converted to string with the help of stringstream ss … Read More

1

Did you mean something like this?

if (year not ok)
{
    cout wrong year message
    return -1;
}
else
{
    do easter calculation
    return 0;
}
1

I solved your project syntax, but alghoritm not correct

// EasterProject
#include<iostream>
    using namespace std;
int main()
{ 
    int intyear, intEasterDate, intEasterMonth;
    int a, b, c, d, e, f, g, h, i, j, k, m, p;
do {
cout<< "What's the year? \n";
    cin>> intyear;

cout<<"Easter Month is \n";

if (intyear<0001||intyear>5000)
    { cout<<"This calculator cannot serve you\n";
    return -1; }
a=intyear%19;
b=intyear/100;
c=intyear%100;
d=b/4;
e=b%4;
f=(b+8)/25;
g=(b-f+1)/3;
h=((19*a)+b-d-g+15)%30;
i=c/4;
j=c%4;
k=(32+(2*e)+(2*i)-h-j)%7;
m=(a+(11*h)+(22*k))/451;
intEasterMonth=(h+k-(7*m)+114)/31;
p=(h+k-(7*m)+114)%31;
intEasterDate=p+1;
cout << intEasterMonth << "." << intEasterDate << "\n\n";
} while (intyear>=0001&&intyear<=5000);

return 0;
}
2

ddanbe, I compared to a built-in PHP function "easter_date()" and adjust alghoritm to C++

#include <iostream>
using namespace std;

void EasterDate(int Year)
    {
        // Gauss Calculation
        ////////////////////

        int Month = 3;

        // Determine the Golden number:
        int G = Year % 19 + 1;

        // Determine the century number:
        int C = Year / 100 + 1;

        // Correct for the years who are not leap years:
        int X = ( 3 * C ) / 4 - 12;

        // Mooncorrection:
        int Y = ( 8 * C + 5 ) / 25 - 5;

        // Find sunday:
        int Z = ( 5 * Year ) / 4 - X - 10;

        // Determine epact(age of moon on 1 januari of that year(follows a cycle of 19 years):
        int E = ( 11 * G + 20 + Y - X ) % 30;
        if (E == 24) {E++;}
        if ((E == 25) && (G > 11)) {E++;}

        // Get the full moon:
        int N = 44 - E;
        if (N < 21) {N = N + 30;}

        // Up to sunday:
        int P = ( N + 7 ) - ( ( Z + N ) % 7 );

        // Easterdate: 
        if ( P > 31 )
        {
            P = P - 31;
            Month = 4;
        }
        cout << Year << "." << Month << "." << P;
    }

int main ()
{
    int year;

    for(int i=1970; i<2038; i++){
        EasterDate(i);
        cout << endl;
        }
    return 0;
}

also incorrect on 1970-1989 years.

(function easter_date() will generate a warning if the year is outside of the range for Unix timestamps (i.e. before 1970 or after 2037).)

This generate width PHP:
1970-03-29
1971-04-10
1972-04-01
1973-04-21
1974-04-13
1975-03-30
1976-04-17
1977-04-09
1978-03-26
1979-04-14
1980-04-05
1981-04-19
1982-04-11
1983-04-03
1984-04-22
1985-04-07
1986-03-30
1987-04-19
1988-04-03
1989-03-26
1990-04-15
1991-03-31
1992-04-19
1993-04-11
1994-04-03
1995-04-16
1996-04-07
1997-03-30
1998-04-12
1999-04-04
2000-04-23
2001-04-15
2002-03-31
2003-04-20
2004-04-11
2005-03-27
2006-04-16
2007-04-08
2008-03-23
2009-04-12
2010-04-04
2011-04-24
2012-04-08
2013-03-31
2014-04-20
2015-04-05
2016-03-27
2017-04-16
2018-04-01
2019-04-21
2020-04-12
2021-04-04
2022-04-17
2023-04-09
2024-03-31
2025-04-20
2026-04-05
2027-03-28
2028-04-16
2029-04-01
2030-04-21
2031-04-13
2032-03-28
2033-04-17
2034-04-09
2035-03-25
2036-04-13
2037-04-05

1

Hi,

you are about to implement the famous Meeus/Jones/Butcher algorithm in c++. Among others, this algorithm, also called "The anonymous Gregorian algorithm", can be found on Click Here.

Unfortunately, you didn't correctly translate the floor function, for example b = floor (Y / 100) of MJB algorithm. floor(x) returns the largest integer not greater than x, e.g. floor (9.999) is 9.0.

c++ has also floor() function, see math.h. So simply put each of your statements where a division is applied into a floor() call, for example:

b=floor(intyear/100);
...
intEasterMonth=floor((h+k-(7*m)+114)/31));

Edited by 1stDAN

1

I checked again, but PHP generated dates are not always on Sunday - so wrong!
This works in C++ and it seems that the correct:

#include <sstream>
#include <iostream>


using namespace std;

string ZeroPadNumber(int num){
    stringstream ss;
    // the number is converted to string with the help of stringstream
    ss << num; 
    string ret;
    ss >> ret;
    // Append zero chars
    int str_length = ret.length();
    for (int i = 0; i < 2 - str_length; i++)
        ret = "0" + ret;
    return ret;
    }

void EasterDate(int X){                             // X = year to compute
    int K, M, S, A, D, R, OG, SZ, OE;

    K  = X / 100;                                   // Secular number
    M  = 15 + (3 * K + 3) / 4 - (8 * K + 13) / 25;  // Secular Moon shift
    S  = 2 - (3 * K + 3) / 4;                       // Secular sun shift
    A  = X % 19;                                    // Moon parameter
    D  = (19 * A + M) % 30;                         // Seed for 1st full Moon in spring
    R  = D / 29 + (D / 28 - D / 29) * (A / 11);     // Calendarian correction quantity
    OG = 21 + D - R;                                // Easter limit
    SZ = 7 - (X + X / 4 + S) % 7;                   // 1st sunday in March
    OE = 7 - (OG - SZ) % 7;                         // Distance Easter sunday from Easter limit in days

    //Easter = DateSerial(X, 3, OG + OE);           // Result: Easter sunday as number of days in March
    cout << X << "-" << ZeroPadNumber(((OG + OE)>31)?4:3) << "-" << ZeroPadNumber((((OG + OE)%31)==0)?31:((OG + OE)%31));
    }

int main ()
{
    int year;
    do {
        cout << "Put the year: ";
        cin >> year;
        EasterDate(year);
        cout << endl << endl;
        }
    while (year>0);
    return 0;
}
This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.