Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#39

AW: Erstellen eines Datum-überprüfers

  Alt 17. Mai 2021, 20:54
Leute zum Thema der Osternüberprüfung verstehe ich die letzte Gleichung nicht, da beide Seiten der Gleichung ja nicht immer das gleiche ergeben.

Die Osterformel: So berechnen Sie das Datum

a = Jahr mod 4
b = Jahr mod 7
c = Jahr mod 19
d = (19c + 24) mod 30
e = (2a + 4b + 6d + 5) mod 7
f = (c + 11d + 22e) / 451
Der Ostersonntag wird daraus wie folgt errechnet: 22 + d + e - 7f
Ist dieses Ergebnis größer als 31, so liegt Ostern im April.
Dann muss folgende Formel für die Berechnung des Ostersonntag angewandt werden:
22 + d + e - 7f - 31 = d + e - 7f - 9.

Ich habe versucht das mal zum Verständnis in ein Quelltext zu übersetzen, da habe ich für beide Seiten der Gleichung jeweils eine Variable deklariert um zu schauen ob immer dasselbe rauskommt.
Die Formulierung ist vielleicht etwas unglücklich. Gemeint ist schlicht und einfach:
Delphi-Quellcode:
  OsterMonat := 3; // -> März
  OsterSonntag := 22 + d + e - 7f;
  if OsterSonntag > 31 then begin
    OsterMonat := OsterMonat + 1; // -> April
    // oder OsterMonat := 4;
    // aus 22 + d + e - 7f wird 22 + d + e - 7f - 31, da 22 - 31 = -9 wird daraus d + e - 7f - 9
    OsterSonntag := OsterSonntag - 31;
  end;
Ein Beispiel:

Sei 22 + d + e - 7f = 35, so fiele der Ostersonntag auf den 35. März. Den gibt es nicht.

Rechnen wird nun mit 22 + d + e - 7f - 31:
Wenn wir das etwas umstellen, wird daraus: d + e - 7f + 22 - 31
Nun rechnen wir noch aus, was 22 - 31 ergibt: -9
und tragen dies in die Formel ein.
Damit erhalten wir: d + e - 7f - 9.

Prinzipiell gilt also:
Ist das Ergebnis von 22 + d + e - 7f größer als 31,
so rechnen wir auf den Monat eins drauf -> März + 1 = April
und ziehen vom 35. März die 31 Tage des März ab.
Damit erhalten wir für den Ostersonntag den 4. April.

Im Programm brauchen wird die Formel d + e - 7f - 9 schlicht und einfach nicht. Sie ist bestenfalls irreführende Redundanz
  Mit Zitat antworten Zitat