Difference between revisions of "Easter date/de"

From Free Pascal wiki
Jump to navigationJump to search
(Created page with "{{Easter date}} <br> Dieses Beispiel berechnet das Osterdatum (Ostersonntag) nach der Formel von Carl Friedrich Gauß für den Zeitraum von 1583 - 8702.<br> <br> <syntaxhighli...")
 
Line 9: Line 9:
 
   ...
 
   ...
  
procedure funOstersonntag(wrdJahr: word);
+
function funOstersonntag(wrdJahr: word): String;
 
// Osterfunktion nach Carl Friedrich Gauß (1800). Rückgabewert
 
// Osterfunktion nach Carl Friedrich Gauß (1800). Rückgabewert
 
// ist das Datum des Ostersonntags im angegebenen Jahr
 
// ist das Datum des Ostersonntags im angegebenen Jahr
Line 65: Line 65:
  
 
   // Rückgabewert als Datum bereitstellen
 
   // Rückgabewert als Datum bereitstellen
   datOstersonntag := EncodeDate(wrdJahr, intMonat, intTage);
+
   Result := EncodeDate(wrdJahr, intMonat, intTage);
  
 
end;
 
end;

Revision as of 06:49, 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): String;
// 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;
  intTage: integer;
  intMonat: integer;

begin

  // Prüf, 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
    intMonat := 4;
    intTage := ((e + f + 22) - 31);
  end
  else
  begin
    intMonat := 3;
    intTage := (e + f + 22);
  end;

  // Rückgabewert als Datum bereitstellen
  Result := EncodeDate(wrdJahr, intMonat, intTage);

end;



--Olaf 05:45, 15 May 2013 (UTC)