Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Osterformel nach Computus ecclesiasticus (https://www.delphipraxis.net/148851-osterformel-nach-computus-ecclesiasticus.html)

Valle 9. Mär 2010 21:09

Re: Osterformel nach Computus ecclesiasticus
 
Zitat:

Zitat von alzaimar
Wolfgang hat mit keinem Wort die Codelibrary erwähnt. Also muss er überhaupt nichts. Er hat 100%ig Recht, wenn er sagt: Schaut selbst nach, es macht Spass, zu recherchieren.

Nur leider ist der Beitrag dann in der falschen Sparte.

Na gut, das habe ich jetzt einfach anders rum interpretiert. Du sagst, sein Beitrag ist gut, aber nicht für die CL und ich sage sein Beitrag ist noch nicht perfekt, aber geht in Richtung CL. Ich denke schon, dass er für die Code Library gedacht ist, sonst würde Wolgang das doch nicht hier posten. Das machen doch eigentlich nur Neulinge, die nicht wissen wo hin. :-)

Liebe Grüße,
Valle

Balu der Bär 9. Mär 2010 21:13

Re: Osterformel nach Computus ecclesiasticus
 
Nich lange diskutieren, einfach ein bisschen formatieren und aufbereiten und mit in diesem Thread posten: http://www.delphipraxis.net/internal...ct.php?t=44748

Fertig.

Wolfgang Mix 9. Mär 2010 21:14

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.

TBx 9. Mär 2010 21:18

Re: Osterformel nach Computus ecclesiasticus
 
Zitat:

Zitat von alzaimar
Nur leider ist der Beitrag dann in der falschen Sparte.

Das sehe ich auch so und darum geht er nun auch auf die Reise ...

Assertor 9. Mär 2010 21:28

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:
// 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;
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.

Quelle: http://user.cs.tu-berlin.de/~csadm/w...01/blatt01.pdf

Gruß,
Assertor

P.S.: Unabhängig vom Nutzen, gerne weiter so!

Wolfgang Mix 10. Mär 2010 09:32

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:

DeddyH 10. Mär 2010 09:36

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 ;)

Assertor 10. Mär 2010 10:20

Re: Osterformel nach Computus ecclesiasticus
 
Hi,

Zitat:

Zitat von DeddyH
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 ;)

DeddyH, du hast natürlich mal wieder absolut recht. Aber Lesbarkeit ist doch gerade bei solchem Code wichtig ;)

Zitat:

Zitat von Wolfgang Mix
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:

:mrgreen: Ja, vielleicht ;) Nur leider ist mein Latein etwas eingerostet:

http://daten.digitale-sammlungen.de/...e=7&pdfseitex=
http://daten.digitale-sammlungen.de/...013958/images/

Wobei es das ja teilweise auch in Deutsch gibt:
http://daten.digitale-sammlungen.de/...9&no=4&seite=5

oder

http://www.nabkal.de/gregkal.html

Aber die englische Wikipedia hat da auch gutes zu:
http://en.wikipedia.org/wiki/Computus#cite_note-41

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:
GoldeneZahl := (Jahr + 1) mod 19;
So, 3-Minuten für heute um, mal morgen schauen :mrgreen:

Gruß,
Assertor

p80286 10. Mär 2010 10:32

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?

Matze 10. Mär 2010 12:48

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. hier.

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:
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;
Und der Abschnitt "Isn't there a simpler way to calculate Easter" im verlinkten Dokument scheint einen anderen Algorithmus zu verwenden.

Blöder Algorithmus. :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr.
Seite 2 von 3     12 3      

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