AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Osterformel nach Computus ecclesiasticus
Thema durchsuchen
Ansicht
Themen-Optionen

Osterformel nach Computus ecclesiasticus

Ein Thema von Wolfgang Mix · begonnen am 9. Mär 2010 · letzter Beitrag vom 11. Mär 2010
 
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: Osterformel nach Computus ecclesiasticus

  Alt 10. Mär 2010, 12:48
Ich habe mir nun ca. 1,5 Stunden die Zeit genommen, zu recherchieren, was es mit dem Code auf sich hat.
Doch überall ist es erforderlich, in einer Tabelle nach zu schauen, bsp. hier.

Ich habe mal versucht, den Code dort umzusetzen und es gibt auch Ähnlichkeiten mit dem Code aus dem C-Buch, aber ganz vollendet bekomme ich den Algorithmus nicht. Und der gleiche Algorithmus ist es wohl auch nicht oder ich habe das Nachschlagen in der Tabelle zu kompliziert umgesetzt.
Das Problem ist nun, dass ich vom berechneten Tag so viele Tage dazu addieren muss, bis man den Sonntag erhält. Nur wie das geht, kriege ich nicht heraus.

Delphi-Quellcode:
function GetEasterDate(Year: Integer): TDate;
var
  Century, GoldenNumber: Integer;
  JulianEpact, GregorianEpact: Integer;
  SolarEquation, LunarEquation: Integer;
  Day, Month: Integer;
begin
  Century := (Year div 100) + 1;
  GoldenNumber := (Year mod 19) + 1;
  JulianEpact := (11 * (GoldenNumber - 1)) mod 30;
  SolarEquation := (3 * Century) div 4;
  LunarEquation := (8 * Century + 5) div 25;
  GregorianEpact := JulianEpact - SolarEquation + LunarEquation + 8;

  while (GregorianEpact > 30) do
    Dec(GregorianEpact, 30);
  while (GregorianEpact < 0) do
    Inc(GregorianEpact, 30);

  // table lookup follows, I hope it's correct

  // month
  if (GregorianEpact < 13) or (GregorianEpact > 23) then
    Month := 4
  else
    Month := 3;

  // day
  if (GregorianEpact < 13) then
    Day := 13 - GregorianEpact
  else if (GregorianEpact < 24) then
    Day := 44 - GregorianEpact
  else if GregorianEpact = 24 then
    Day := 18
  else if GregorianEpact = 25 then
  begin
    if GoldenNumber > 11 then
      Day := 17
    else
      Day := 18;
  end
  // GregorianEpact > 25
  else
    Day := 43 - GregorianEpact;

  // go forward to easter sunday
  // example: if Day is a friday => Inc(Day, 2) to get the sunday
  // but how to do it?

  Result := EncodeDate(Year, Month, Day);
end;
Und der Abschnitt "Isn't there a simpler way to calculate Easter" im verlinkten Dokument scheint einen anderen Algorithmus zu verwenden.

Blöder Algorithmus.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz