AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zusatz zu "Ostersonntag eines Jahres berechnen"
Thema durchsuchen
Ansicht
Themen-Optionen

Zusatz zu "Ostersonntag eines Jahres berechnen"

Ein Thema von Balu der Bär · begonnen am 1. Okt 2006 · letzter Beitrag vom 1. Okt 2006
Antwort Antwort
Seite 1 von 3  1 23      
Balu der Bär
(Gast)

n/a Beiträge
 
#1

Zusatz zu "Ostersonntag eines Jahres berechnen"

  Alt 1. Okt 2006, 08:37
Moin,

da ich mir grad ein paar Algorithmen angucke bin ich in der Codelib auf Ostersonntag eines Jahres berechnen von flomei gestoßen. Dabei fiel mir auf das flomei's Algorithmus nur von 1700 bis 2199 gilt. Also hier schnell meine Umsetzung, diese Berechnung gilt für die Jahre 1583 bis 3900:
Delphi-Quellcode:
(* Gaußsche Osterformel (Berechnung des Ostersonntages)

  nach Carl Friedrich Gauß

  Der 22. März is der früheste Termin, der 25. April der letzte, auf den Ostern fallen kann.
  Gilt für die Jahre 1583 (Beginn des Gregorianischen Kalenders) bis 3900.

  Umsetzung: Balu der Baer
*)


function EasterSunday(Year : Integer) : TDateTime;
var
a, b, c, d, e, H1, H2, n, m, temp, easter : Integer;
begin
if not ((Year > 1583) and (Year < 3900)) then
raise Exception.CreateFmt('function EasterSunday: parameter Year must be between 1583 and 3900 but is %d', [Year])
 else begin
 a := Year mod 19;
 b := Year mod 4;
 c := Year mod 7;
 H1 := Year div 100;
 H2 := Year div 400;
 n := 4 + H1 - H2;
 m := 15 + H1 - H2 - ((8 * H1 + 13) div 25);
 d := (19 * a + m) mod 30;
 e := (2 * b + 4 * c + 6 * d + n) mod 7;
 if d + e = 35 then easter := 50;
 if (d = 28) and (e = 6) and (a > 10) then easter := 49
  else easter := 22 + d + e;
 if easter > 31 then
  begin
   temp := easter - 31;
   case temp of
    26 : temp := 19;
    25 : if (d = 28) and (a > 10) then temp := 18;
   end;
   result := EncodeDate(Year, 4, temp);
  end
   else result := EncodeDate(Year, 3, easter);
end
end;

//Beispielaufruf:
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(DateTimeToStr(EasterSunday(StrToInt(Edit1.Text))));
end;
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Zusatz zu "Ostersonntag eines Jahres berechnen"

  Alt 1. Okt 2006, 11:45
ich habe 3 Fragen:

1.) im Jahre 1981 war Ostersonntag am ?
2.) im Jahre 2076 ist Ostersonntag am ?
3.) warum liefert deine Funktion kein TDateTime als Resultat ?

Ich frage weil ich mindestens 7 unterschiedliche Delphi Sourcen habe und alle was anderes berechnen. Dann gibts noch mindestens 700 unterschiedliche PHP oder JAVA Sourcen im WEB die auch alle was anderes sagen. As meiner Sicht gilt "die Wege des Herrn sind unergründlich" besonders wenn er seine Feiertage berechnet

Gruß Hagen

PS: http://www.weltzeituhr.com/infos/kir...eiertage.shtml
  Mit Zitat antworten Zitat
Balu der Bär
(Gast)

n/a Beiträge
 
#3

Re: Zusatz zu "Ostersonntag eines Jahres berechnen"

  Alt 1. Okt 2006, 13:24
Hallo Hagen,

danke für dein Feedback. Ich habe deine 3 Fragen mal beherzigt und mich etwas genauer damit auseinandergesetzt, nach meinen Tests sollte es jetzt eigentlich stimmen.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Zusatz zu "Ostersonntag eines Jahres berechnen"

  Alt 1. Okt 2006, 14:24
Delphi-Referenz durchsuchenEncodeDate
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Zusatz zu "Ostersonntag eines Jahres berechnen"

  Alt 1. Okt 2006, 14:36
Also die untere Grenze verstehe ich - davor hatten wir einen anderen Kalendar. Aber warum ist so eine Funktion nur bis zum Jahre 3900 richtig? Ändert sich da irgendwas
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Zusatz zu "Ostersonntag eines Jahres berechnen"

  Alt 1. Okt 2006, 14:38
Zitat von Nicolai1605:
Also die untere Grenze verstehe ich - davor hatten wir einen anderen Kalendar. Aber warum ist so eine Funktion nur bis zum Jahre 3900 richtig? Ändert sich da irgendwas
Warte es doch einfach ab.
Markus Kinzler
  Mit Zitat antworten Zitat
Balu der Bär
(Gast)

n/a Beiträge
 
#7

Re: Zusatz zu "Ostersonntag eines Jahres berechnen"

  Alt 1. Okt 2006, 14:45
Zitat von Khabarakh:
Ok, habe es geändert.

Auch nach 3900 liefert meine Funktion noch Ergebnisse, ob diese nach dem gregorianischen Kalender allerdings richtig sind kann ich nicht sagen. Außerdem, wer braucht schon die die Ostersonntage nach 3900?
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#8

Re: Zusatz zu "Ostersonntag eines Jahres berechnen"

  Alt 1. Okt 2006, 15:25
Zitat von Balu der Bär:
Außerdem, wer braucht schon die die Ostersonntage nach 3900?
Zitat:
nur von 1700 bis 2199 gilt
und wer braucht die Ostersonntage nach 2199

  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#9

Re: Zusatz zu "Ostersonntag eines Jahres berechnen"

  Alt 1. Okt 2006, 15:26
Zitat:
Auch nach 3900 liefert meine Funktion noch Ergebnisse, ob diese nach dem gregorianischen Kalender allerdings richtig sind kann ich nicht sagen. Außerdem, wer braucht schon die die Ostersonntage nach 3900?

Da hast du absolut Recht, das braucht keiner

Aber wo in deinem Source wird denn eine Excpetion ausgelösst wenn das übergebene Jahr ausserhalb deiner Schranken ist ? Das sehe ich nämlich nicht und ergo könnte ein Anwender deiner Funktion eben auch Ostern für das Jahr 4000 berechnen wollen oder für das Jahr 100 nach Christi (der User der Funktion weis ja nicht was ein gregorianischer Kalender ist und schon garnicht ab wann der gültig war).

Ergo: mache deine Funktion bulletproof das ist immer ein guter Stil, indem du das Jahr überprüftst und falls es ausserhalb deiner gültigen Schranken ist raise eine Exception.

Gruß Hagen

[edit]
komme mir ja nicht mit dem Argument: "das habe ich ja als Remark oben drüber geschrieben" ! Das interesiert nicht und verhindert niemals die Möglichkeit eben denoch ein Jahr wie 100 oder 4000 zu übergeben. Also lieber weniger Remarks dafür aber Code bei dem der Entwickler weiter gedacht hat als üblich.
[/edit]
  Mit Zitat antworten Zitat
Balu der Bär
(Gast)

n/a Beiträge
 
#10

Re: Zusatz zu "Ostersonntag eines Jahres berechnen"

  Alt 1. Okt 2006, 15:42
Zitat:
komme mir ja nicht mit dem Argument: "das habe ich ja als Remark oben drüber geschrieben" !
Niemals würde ich dir widersprechen.

Habs oben geändert und nochmals bisschen getestet, sollte jetzt fehlerfrei laufen. Danke an alle.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 23:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz