algorytm.org

Implementacja w C/C++

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Wyznaczanie daty Wielkanocy - metoda Meeusa/Jonesa/Butchera - Implementacja w C/C++
Ocena użytkownikóww: *****  / 0
SłabyŚwietny
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;
 
}
Dodaj komentarz