Forum: Projekte & Code Gaußsche Osterformel


von Jan B. (berge)


Lesenswert?

Hallo zusammen,

hier nur kurz eine kleine Implementation der Gaußschen Osterformel. Zur 
Feiertagsberechnung recht hilfreich :)
1
// Function that calculates the date of easter sunday as days after februar
2
// E.g. 32 would be 1. of april (Returns value: min. 22, max. 56)
3
int GetEasterSundayDateAsDaysAfterFebruary( int YEAR )
4
{
5
  int  k = YEAR / 100;    // K(X) = X div 100
6
  int s = 2 - (3*k + 3) / 4;  // S(K) = 2 - (3K + 3) div 4
7
  int m = 15 + (3*k + 3) / 4 - (8*k + 13) / 25;  // M(K) = 15 + (3K + 3) div 4 - (K + 13) div 25
8
  int a = YEAR % 19;  // A(X) = X mod 19
9
  int d = ( 19*a + m ) % 30;  // D(A,M) = (19A + M) mod 30
10
  //int r = (int) d / 29 + (int) d / 28 - (int) d / 29 - (int) a / 11;  // R(D,A) = D div 29 + (D div 28 - D div 29) (A div 11)
11
  int r = ( d + a / 11 ) / 29;  // Shorter Roegel version: R(D,A) = (D + A div 11) div 29
12
  int og = 21 + d - r;  // OG(D,R) = 21 + D - R
13
  int sz = 7 - ( YEAR + YEAR / 4 + s ) % 7;  // SZ(X,S) = 7 - (X + X div 4 + S) mod 7
14
  int oe = 7 - ( og - sz ) % 7;  // OE(OG,SZ) = 7 - (OG - SZ) mod 7
15
16
  return og + oe;
17
}

von Kevin (Gast)


Lesenswert?

Ultrabrutal, ich schaue immer im Kalender nach.

von Dario B. (abcd)


Lesenswert?

watt gut, dass es kalender gibt ;-)

von Jan B. (berge)


Lesenswert?

Für die kein Interesse haben ihre Feiertagsberechnung über eine Kalender 
Lookup-Table für die nächsten Jahrzehnte durchzuführen, ist das 
definitiv hilfreich.

Anwendungsbeispiel: Meine Version der Word Clock schaltet sich an 
Wochentagen aus. An Feiertagen tat sie es bisher auch. Dank der 
Osterformel und ein bisschen Zusatzcode nun nicht mehr :)

von Simon K. (simon) Benutzerseite


Lesenswert?

Typisches Beispiel für ziemlich schlechten Coding-Style.

- Parameter als komplett Uppercase?
- Extrem sinnlose Variablennamen
- "unbenamte" Konstanten (define)
- Sinnlose Kommentare
- Keine kurze Beschreibung des Algorithmus

von Ale (Gast)


Lesenswert?

Aber ein sehr deskriptiver Funktionsname ;-)

von Matthias (Gast)


Lesenswert?

Simon K. schrieb:
> Typisches Beispiel für ziemlich schlechten Coding-Style.
>
> - Parameter als komplett Uppercase?
> - Extrem sinnlose Variablennamen

Er hat einfach die Gleichungen samt Bezeichnungen aus
http://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel#Eine%20erg%C3%A4nzte%20Osterformel
übernommen.

von mahwe (Gast)


Lesenswert?

Oder,
man nehme den ersten Sonntag im Frühjahr nach dem ersten Vollmond;-).

von Simon K. (simon) Benutzerseite


Lesenswert?

Matthias schrieb:
> Simon K. schrieb:
>> Typisches Beispiel für ziemlich schlechten Coding-Style.
>>
>> - Parameter als komplett Uppercase?
>> - Extrem sinnlose Variablennamen
>
> Er hat einfach die Gleichungen samt Bezeichnungen aus
> http://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterfo...
> übernommen.

Das könnte man ja als Kommentar dazu schreiben.

von GeraldB (Gast)


Lesenswert?

mahwe schrieb:
> man nehme den ersten Sonntag im Frühjahr nach dem ersten Vollmond;-).
                               ^^^^^^^^^^^

Wann ist für Frühjahr?

Laut Wiki:
Auf Grund neutestamentlicher Überlieferung wurde der Ostertermin 
festgelegt als der erste Sonntag nach dem ersten Frühlingsvollmond. 
Vereinbartes Datum für den frühesten Frühlingsvollmond ist der 21. März, 
so dass der früheste Ostersonntag auf den 22. März fällt. Spätestes 
Osterdatum ist der 25. April.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.