Difference between revisions of "Easter date/de"

From Free Pascal wiki
Jump to navigationJump to search
m
Line 74: Line 74:
 
<br>
 
<br>
 
--[[User:Olaf|Olaf]] 05:45, 15 May 2013 (UTC)
 
--[[User:Olaf|Olaf]] 05:45, 15 May 2013 (UTC)
{{AutoCategory}}[[Category:Code Parts/de]][[Category:Mathe/de]]
+
 
 +
 
 +
{{AutoCategory}}
 +
[[Category:Code Snippets/de]]
 +
[[Category:Mathe/de]]

Revision as of 23:00, 29 October 2015

Deutsch (de)
Zurück zur Seite Code Beispiele.

Dieses Beispiel berechnet das Osterdatum (Ostersonntag) der Westkirchen 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)