Difference between revisions of "Easter date/de"

From Free Pascal wiki
Jump to navigationJump to search
m (Fixed syntax highlighting)
 
Line 1: Line 1:
 
{{Easter date}}
 
{{Easter date}}
<br>
+
 
Zurück zur Seite [[code examples/de|Code Beispiele]].<br>
+
 
<br>
+
Zurück zur Seite [[code examples/de|Code Beispiele]].
Dieses Beispiel berechnet das Osterdatum (Ostersonntag) der Westkirchen nach der Formel von Carl Friedrich Gauß für den Zeitraum von 1583 - 8702.<br>
+
 
<br>
+
 
<syntaxhighlight>
+
Dieses Beispiel berechnet das Osterdatum (Ostersonntag) der Westkirchen nach der Formel von Carl Friedrich Gauß für den Zeitraum von 1583 - 8702.
 +
 
 +
<syntaxhighlight lang=pascal>
 
uses
 
uses
 
   SysUtils, DateUtils, Dialogs;
 
   SysUtils, DateUtils, Dialogs;
Line 71: Line 73:
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
<br>
 
<br>
 
--[[User:Olaf|Olaf]] 05:45, 15 May 2013 (UTC)
 
 
  
 
{{AutoCategory}}
 
{{AutoCategory}}
 
[[Category:Code Snippets/de]]
 
[[Category:Code Snippets/de]]
 
[[Category:Mathe/de]]
 
[[Category:Mathe/de]]

Latest revision as of 08:30, 14 February 2020

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;