Wielkanoc: liczba złota i cykl 19 lat

Kalendarz krok po kroku: święta - Podstawy C++ (C++)

Wielkanoc to pierwsza niedziela po pierwszej wiosennej pełni Księżyca, więc jej data co roku się zmienia. Fazy Księżyca powtarzają się prawie dokładnie co 19 lat (19 lat to 235 miesięcy księżycowych). Reszta y % 19, zwana liczbą złotą, mówi, w którym miejscu tego cyklu jest rok. Program wypisuje ją dla 20 lat: 2026 i 2045 mają tę samą liczbę złotą, więc pełnię w tym samym dniu.

#include <iostream>
using namespace std;

// swieta stale: dzien, miesiac i nazwa (bez polskich liter - konsola)
const int FIXED = 10;
int fixedDay[FIXED] = {1, 6, 1, 3, 15, 1, 11, 24, 25, 26};
int fixedMonth[FIXED] = {1, 1, 5, 5, 8, 11, 11, 12, 12, 12};
char fixedName[FIXED][28] = {"Nowy Rok", "Trzech Kroli", "Swieto Pracy",
                             "Swieto Konstytucji", "Wniebowziecie NMP",
                             "Wszystkich Swietych", "Swieto Niepodleglosci",
                             "Wigilia", "Boze Narodzenie", "Drugi dzien Swiat"};

// data jako 5.04 (miesiac zawsze dwiema cyframi)
void printDate(int d, int m) {
  cout << d << "." << (m < 10 ? "0" : "") << m;
}

// numer swieta stalego w tablicy albo -1, gdy to zwykly dzien
int fixedHoliday(int d, int m, int y) {
  for (int i = 0; i < FIXED; i++) {
    if (fixedDay[i] == d && fixedMonth[i] == m) {
      if (i == 7 && y < 2025) {
        return -1; // Wigilia jest wolna od 2025 roku
      }
      return i;
    }
  }
  return -1;
}

// liczba zlota: miejsce roku w 19-letnim cyklu Ksiezyca (0..18)
int golden(int y) {
  return y % 19;
}

int main() {
  for (int y = 2026; y <= 2045; y++) {
    cout << y << ": " << golden(y) << endl;
  }
  return 0;
}

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu Podstawy C++·Zaloguj się, aby zapisać postęp na koncie.