![]() |
Re: Osterformel nach Computus ecclesiasticus
Zitat:
Liebe Grüße, Valle |
Re: Osterformel nach Computus ecclesiasticus
Nich lange diskutieren, einfach ein bisschen formatieren und aufbereiten und mit in diesem Thread posten:
![]() Fertig. |
Re: Osterformel nach Computus ecclesiasticus
Ihr könnt den Thread verschieben, wohin ihr wollt,
ist ja nicht mein Geistesgut, würde es allerdings aus historischen Gründen gut finden, wenn man das hier irgendwo finden würde. |
Re: Osterformel nach Computus ecclesiasticus
Zitat:
|
Re: Osterformel nach Computus ecclesiasticus
Hallo Wolfang,
ich habe den Code im Rahmen meiner 3-minütigen Tageslangeweile mal entsprechend der üblichen Gegenbenheiten unter uns Delphi Entwicklern etwas umformatiert.
Delphi-Quellcode:
Ich habe die Klammerung für den Vergleich von E angepasst: Wenn E = 25 und G > 11 soll E um 1 erhöht werden, ebenso im Falle E = 24.
// Osterformel mit computus ecclesiasticus
function GetEasterDate(Jahr: Integer): TDate; // Jahr des gregorianischen Kalenders var G, X, Z, D, E, N: Integer; Jahrhundert, Tag, Monat: Integer; MyDate: TDate; begin G := (Jahr mod 19) + 1; Jahrhundert := Jahr div 100 + 1; X := 3 * Jahrhundert div 4 - 12; Z := (8 * Jahrhundert + 5) div 25 - 5; D := (5 * Jahr) div 4 - X - 10; E := (11 * G + 20 + Z - X) mod 30; if ((E = 25) and (G > 11)) or (E = 24) then // Klammerung? Inc(E); N := 44 - E; if N < 21 then Inc(N, 30); N := N + 7 - (D + N) mod 7; if N > 31 then begin Tag := n - 31; // (n-31).April Monat := 4; end else begin Tag := N; // n.März Monat := 3; end; {------Soweit der Originalcode---------} MyDate := EncodeDate(Jahr, Monat, Tag); Result := MyDate; end; Quelle: ![]() Gruß, Assertor P.S.: Unabhängig vom Nutzen, gerne weiter so! |
Re: Osterformel nach Computus ecclesiasticus
Danke, das Arbeitsblatt habe ich auch schon einmal gesehen.
Leider fehlen auch hier die Erklärungen für die Variablen. Vielleicht hast du ja noch einmal 3 Minuten Zeit :mrgreen: |
Re: Osterformel nach Computus ecclesiasticus
IIRC wäre die Klammerung rein logisch nicht nötig gewesen, auch wenn sie zumindest dem besseren Verständnis dient, denn AFAIK hat and eine höhere Priorität als or. Aber das nur am Rande ;)
|
Re: Osterformel nach Computus ecclesiasticus
Hi,
Zitat:
Zitat:
![]() ![]() Wobei es das ja teilweise auch in Deutsch gibt: ![]() oder ![]() Aber die englische Wikipedia hat da auch gutes zu: ![]() Goldene Zahl, Epakte und Sonntagsbuchstabe wären in vorherigem Code noch zu ersetzen. Für ersteres ist G ein guter Anhaltspunkt ;) Auch wenn es ob andersherum schon drin ist:
Delphi-Quellcode:
So, 3-Minuten für heute um, mal morgen schauen :mrgreen:
GoldeneZahl := (Jahr + 1) mod 19;
Gruß, Assertor |
Re: Osterformel nach Computus ecclesiasticus
@Assertor
Vielen Dank für den Link und die Aufbereitung! Habe ich mich getäuscht oder gibt es hier zwei Fraktionen, die einen, die formale Mängel in Wolfgangs Beitrag sehen und die anderen, die solch "alten Mist" für überflüssig halten, weil es in der x-Lib die Y-Funktion gibt, die das sowieso viel schneller erledigen kann. Forrmal kann da bestimmt das eine oder andere besser gemacht werden, aber überflüssig ist so etwas überhaupt nicht, da meiner Meinung nach die Kenntnis über die Existenz solcher Algorithmen, und noch besser deren Anwendung (und Optimierung)zum Handwerkszeug eines Programmieres gehört. Das zusammenklicken von Codefragmenten sollten wir den Script-Kiddies überlassen. (Manchmal ist es allerdings bequemer und schneller das Rad nicht neu zu erfinden) Meiner Meinung nach gehört das (überarbeitet) in die Codelib. Gruß K-H Edit: Gottjemine, der deutsche Text ist zumindestens keine wörtliche Übersetzung. Was bin ich froh das ich das nicht mehr übersetzen muß, wie kommt Ihr nur immer wieder an solche links in dem ganzen google Müll? |
Re: Osterformel nach Computus ecclesiasticus
Ich habe mir nun ca. 1,5 Stunden die Zeit genommen, zu recherchieren, was es mit dem Code auf sich hat.
Doch überall ist es erforderlich, in einer Tabelle nach zu schauen, bsp. ![]() Ich habe mal versucht, den Code dort umzusetzen und es gibt auch Ähnlichkeiten mit dem Code aus dem C-Buch, aber ganz vollendet bekomme ich den Algorithmus nicht. Und der gleiche Algorithmus ist es wohl auch nicht oder ich habe das Nachschlagen in der Tabelle zu kompliziert umgesetzt. Das Problem ist nun, dass ich vom berechneten Tag so viele Tage dazu addieren muss, bis man den Sonntag erhält. Nur wie das geht, kriege ich nicht heraus. :gruebel:
Delphi-Quellcode:
Und der Abschnitt "Isn't there a simpler way to calculate Easter" im verlinkten Dokument scheint einen anderen Algorithmus zu verwenden.
function GetEasterDate(Year: Integer): TDate;
var Century, GoldenNumber: Integer; JulianEpact, GregorianEpact: Integer; SolarEquation, LunarEquation: Integer; Day, Month: Integer; begin Century := (Year div 100) + 1; GoldenNumber := (Year mod 19) + 1; JulianEpact := (11 * (GoldenNumber - 1)) mod 30; SolarEquation := (3 * Century) div 4; LunarEquation := (8 * Century + 5) div 25; GregorianEpact := JulianEpact - SolarEquation + LunarEquation + 8; while (GregorianEpact > 30) do Dec(GregorianEpact, 30); while (GregorianEpact < 0) do Inc(GregorianEpact, 30); // table lookup follows, I hope it's correct // month if (GregorianEpact < 13) or (GregorianEpact > 23) then Month := 4 else Month := 3; // day if (GregorianEpact < 13) then Day := 13 - GregorianEpact else if (GregorianEpact < 24) then Day := 44 - GregorianEpact else if GregorianEpact = 24 then Day := 18 else if GregorianEpact = 25 then begin if GoldenNumber > 11 then Day := 17 else Day := 18; end // GregorianEpact > 25 else Day := 43 - GregorianEpact; // go forward to easter sunday // example: if Day is a friday => Inc(Day, 2) to get the sunday // but how to do it? Result := EncodeDate(Year, Month, Day); end; Blöder Algorithmus. :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz