Difference between revisions of "Easter date/de"
From Free Pascal wiki
Jump to navigationJump to searchm |
|||
Line 25: | Line 25: | ||
begin | begin | ||
− | // | + | // Prüft, ob das Jahr korrekt ist |
if wrdJahr < 1583 then | if wrdJahr < 1583 then | ||
begin | begin |
Revision as of 08:03, 15 May 2013
Deutsch (de)
Dieses Beispiel berechnet das Osterdatum (Ostersonntag) nach der Formel von Carl Friedrich Gauß für den Zeitraum von 1583 - 8702.
uses
SysUtils, DateUtils, Dialogs;
...
function funOstersonntag(wrdJahr: word): TDate;
// Osterfunktion nach Carl Friedrich Gauß (1800). Rückgabewert
// ist das Datum des Ostersonntags im angegebenen Jahr
// Gültigkeitsbereich: 1583 - 8702
var
a: integer;
b: integer;
c: integer;
d: integer;
e: integer;
f: integer;
wrdTage: word;
wrdMonat: word;
begin
// Prüft, ob das Jahr korrekt ist
if wrdJahr < 1583 then
begin
ShowMessage('Das Jahr ist zu klein und liegt vor dem Jahr 1583.');
Exit;
end;
if wrdJahr > 8702 then
begin
ShowMessage('Das Jahr ist zu groß und liegt nach dem Jahr 8702.');
Exit;
end;
// Die Gauss-Formel
a := wrdJahr mod 19;
b := wrdJahr div 100;
c := (8 * b + 13) div 25 - 2;
d := b - (wrdJahr div 400) - 2;
e := (19 * (wrdJahr mod 19) + ((15 - c + d) mod 30)) mod 30;
if e = 28 then
if a > 10 then
e := 27
else if e = 29 then
e := 28;
f := (d + 6 * e + 2 * (wrdJahr mod 4) + 4 * (wrdJahr mod 7) + 6) mod 7;
if (e + f + 22) > 31 then
begin
wrdMonat := 4;
wrdTage := ((e + f + 22) - 31);
end
else
begin
wrdMonat := 3;
wrdTage := (e + f + 22);
end;
// Rückgabewert als Datum bereitstellen
Result := EncodeDate(wrdJahr, wrdMonat, wrdTage);
end;
--Olaf 05:45, 15 May 2013 (UTC)