Ocena użytkownikóww: ***** / 0
Nadesłany przez Michał Witaszek, 14 lipca 2016 20:26
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
easter.cpp:
/*
* Wyznaczanie daty Wielkanocy - metoda Meeusa/Jonesa/Butchera
* (c)2016 by Michał Witaszek
* www.algorytm.org
* Implementacja C++11
*/
#include <iostream>
#include <string>
using namespace std;
//znak separatora zapisu daty
const char separator = '.';
//funkca zwracająca datę wielkoanocy jako wartość typu std::string
string easter(short int year){
//zmienne pomocnicze
int a, b, c, d, e, f, g, h, i, k, l, m, p;
//implementacja algorytmu metody Meeusa/Jonesa/Butchera
a = year % 19;
b = (int)(year / 100);
c = year % 100;
d = (int)(b / 4);
e = b % 4;
f = (int)((b + 8) / 25);
g = (int)((b - f + 1) / 3);
h = (19 * a + b - d - g + 15) % 30;
i = (int)(c / 4);
k = c % 4;
l = (32 + 2 * e + 2 * i - h - k) % 7;
m = (int)((a + 11 * h + 22 * l) / 451);
p = (h + l - 7 * m + 114) % 31;
unsigned short int day_n = p + 1;
unsigned short int month_n = ((h + l - 7 * m + 114) / 31);
//std::to_string C++11
string day = to_string(day_n);
string month=to_string(month_n);
//dodawanie zer wiodących
if(day_n < 10) day = "0"+day;
if(month_n < 10) month = "0"+month;
//zapisz datę wielkanocy do zmiennej typu std::string
string easter_date = day + separator + month + separator + to_string(year);
//zwróc wynik fukcji
return easter_date;
}
int main(){
cout<< "Wyznaczanie daty Wielkanocy - metoda Meeusa/Jonesa/Butchera" << endl;
cout<< "Podaj rok: ";
short int year_n = -1;
while(year_n<0){ //dopóki nie podano wartości dodatniej
cin >> year_n; //pobierz rok
if(year_n<0) //jeśli podano wartość ujemną
cout<< "Podaj wartość dodatnią: "; //wyświetl komunikat z instrukcją
}
//wyświetl wyliczoną datę
cout << "Data Wielkanocy to: "<< easter(year_n) << endl;
}