Data wiosennej pełni
Kalendarz krok po kroku: święta - Podstawy C++ (C++)
Z liczby złotej wzór Gaussa liczy, ile dni po 21 marca (początek wiosny według kalendarza kościelnego) wypada pełnia: (19 * a + 24) % 30. Każdy kolejny rok cyklu przesuwa pełnię o 19 dni do przodu (czyli o 11 dni wstecz, bo % 30). Liczba 24 jest dobrana dla lat 1900-2099. Dzień większy niż 31 przechodzi na kwiecień.
#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;
}
// o ile dni po 21 marca wypada wiosenna pelnia (lata 1900-2099)
int moonOffset(int y) {
return (19 * golden(y) + 24) % 30;
}
int main() {
for (int y = 2024; y <= 2030; y++) {
int d = 21 + moonOffset(y);
int m = 3;
if (d > 31) {
d -= 31;
m = 4;
}
cout << y << ": pelnia ";
printDate(d, m);
cout << 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.