Delphi-PRAXiS
Seite 1 von 3  1 23      

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)

Wolfgang Mix 9. Mär 2010 19:40


Osterformel nach Computus ecclesiasticus
 
Liste der Anhänge anzeigen (Anzahl: 1)
Osterformel nach Computus ecclesiasticus

Heute stelle ich einen Algorithmus vor, der schon fast in Vergessenheit
geraten ist. Wie wir alle wissen, hat sich Gauss 1800 mit seinem Osteralgorithmus
verewigt, der heute immer noch in julianischen und gregorianischen
Kalendern Anwendung findet. Der ist hier in der DP mehrfach zu finden.
In den Jahren davor war es hohen Priestern vorbehalten, sich mit
Algorithmen zum Kalender zu beschäftigen. Aus diesen Zeiten stammt der
Computus ecclesiasticus zur Bestimmung des Ostersonntags eines Jahres,
namentlich auf Aloysius Lillius und dem Jesuiten Christopher Clavius
zurückzuführen. Die Quellen zu dem Pseudocode sind im Internet sehr rar.
Ich habe diesen Pseudocode bei Helmut Herold gefunden:
Die Programmiersprache C, Teil 2 S.266 (im Anhang)

Der Pseudocode liefert Daten für Ostersonntage im gregorianischen
Kalender.

Einige werden wieder fragen: Was soll das?

Ich meine:

- Delphi liefert, zumindest bis zur Version 7 keine Unterstüzung

- Der Code ist wieder plattformunabhängig und lässt sich einfach
in jede Programmiersprache portieren

- Wieder ein hervorragendes Beispiel, um Pseudocode in Code umzusetzen
(vor allem für Anfänger ein riesengrosses Problem)

- Interesse zu wecken, den Code zu verstehen
(erfordert viel Recherche-Arbeit)

- Ergebnisse mit dem Gauss-Algorithmus vergleichen

- Der Pseudo-Code hat historische Bedeutung


Nach Delphi umgesetzter Code (Vorschlag):

Delphi-Quellcode:
implementation

{$R *.dfm}

//Osterformel mit computus ecclesiaticus
function computus(y:integer):TDate;
var C,G,X,Z,D,E,N,T,M:integer;
    mydate:TDate;
begin
  G:=(Y mod 19) +1;
  C:= Y div 100 +1;
  X:= 3*C div 4 - 12;
  Z:= (8*C+5) div 25 - 5;
  D:= (5*Y) div 4 - X - 10;
  E:= (11*G + 20 +Z-X) mod 30;
  if (E=25) and (G>11) or (E=24) then inc(E);
  N:=44-E;
  if n<21 then inc (N,30);
  N:=N+7- (D+N) mod 7;
  if (N>31) then
  begin
    T:= n-31; //(n-31).April
    M:=4;
  end
  else
  begin
    T := N;//n.März
    M:=3;
  end;
  {------Soweit der Originalcode----------}
  mydate:=EncodeDate(Y,M,T);
  result:=mydate;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Y:integer;
begin
  Y:=StrToInt(Spinedit1.Text);
  Edit1.Text:=DateToStr(computus(Y));
end;

end.
Gruss

Wolfgang

DeddyH 9. Mär 2010 19:46

Re: Osterformel nach Computus ecclesiasticus
 
[OT] Du hast einen Knall mit Deinen Kalenderfunktionen. (SCNR^^)[/OT]
:lol:

Wolfgang Mix 9. Mär 2010 19:54

Re: Osterformel nach Computus ecclesiasticus
 
Naja, ich forsche halt seit längerer Zeit :)

Valle 9. Mär 2010 20:24

Re: Osterformel nach Computus ecclesiasticus
 
Hallo,

ich glaube wir hatten das schonmal in einem anderen Thread von dir, aber ich möchte trotzdem meine Meinung dazu sagen. Ich finde, man sollte der Funktion noch aussagekräftige Variablennamen verpassen. Auch die Formatierung ist nicht gerade schön, auch wenn da jeder seinen eigenen Stil hat. Das Beispiel im Form des ButtonClick-Events sollte man meiner Meinung nach auch entfernen.

Ansonsten kann auch sowas in die CL, wenn es nach mir ginge. Natürlich gehört der Algorithmus zu jenen, die kaum jemand brauchen wird, aber ich wäre trotzdem um jeden halbwegs ordentlichen Beitrag froh. =)
Liebe Grüße,
Valentin

Wolfgang Mix 9. Mär 2010 20:46

Re: Osterformel nach Computus ecclesiasticus
 
@Valle:

- Den Thread hatten wir noch nicht
- Über die Formatierung kann man diskutieren
- Den Button1Click kann man natürlich entfernen,
war als Hilfe für Anfänger gedacht
- Die Variablennamen habe ich bewusst aus dem Original
übernommen, Interessierte sollen schon selbst forschen,
was sie bedeuten (alles vorkauen bringt nichts)
- Dass den Code keiner braucht, ist auch klar

Was du unter einem halbwegs ordentlichen Beitrag verstehst,
ist mir unklar

LG

Wolfgang

Luckie 9. Mär 2010 20:49

Re: Osterformel nach Computus ecclesiasticus
 
Zitat:

Zitat von Wolfgang Mix
- Die Variablennamen habe ich bewusst aus dem Original
übernommen, Interessierte sollen schon selbst forschen,
was sie bedeuten (alles vorkauen bringt nichts)

Das ist aber nicht Sinn und Zweck der Codelib, dass man sich erst extrene Quellen zum Verständnis des Codes suchen muss. Und was mache ich, wenn ich eine andere als deine Quelle mit anderen Variablennamen finde? Was spricht dagegen, den Code durch aussagekräftige Variablenname lesbar, verständlich und nachvollziehbar zu machen?

Matze 9. Mär 2010 20:52

Re: Osterformel nach Computus ecclesiasticus
 
Tja Wolfgang, die Algorithmen nach Delphi zu übersetzen kann im Prinzip jeder. Sie sauber aufzubereiten ist schon etwas aufwändiger. ;)
Wenn du den Code verstanden hast, dann ändere bitte die Variablen. Aktuell finde ich den persönlich auch sehr unleserlich und die Code-Library soll ja eine gewisse Vorbildfunktion haben.

Valle 9. Mär 2010 20:53

Re: Osterformel nach Computus ecclesiasticus
 
Mh. :gruebel:

Also ich bin mir recht sicher, irgendwo mal jemanden deine Variablen-Namen kritisieren gesehen zu haben. Aber wenn du meinst das hat bisher keiner gemacht, dann glaube ich dir das - du wirst es besser wissen als ich. :-)

Mit der Begründung "alles vorkauen bringt nichts" bin ich dann ehrlich gesagt aber nicht mehr einverstanden. Dein Code ist bereits vorgekaut. Jemanden der einfach nur vorran kommen will, braucht ihn nur noch zu kopieren. Für Leute die ihn wirklich verstehen wollen, sind deine Variablen nur noch ein Hindernis. Wenn du nicht vorkauen möchtest, dann bist du in der CL glaube ich falsch.

Zitat:

Zitat von Wolfgang Mix
Was du unter einem halbwegs ordentlichen Beitrag verstehst, ist mir unklar

Es gab (diesmal bin ich mir sicher :mrgreen: ) schon einige Leute, die meinten, deine CL-Beiträge wären sinnlos. Was ich damit sagen wollte ist, dass ich der Meinung bin, dass jeder CL-Eintrag willkommen ist, solange er halbwegs ordentlich ist. Also eine Funktion die Hello World ausgibt wollte ich damit ausschließen. Ansonsten finde ich den Beitrag doch super, ist doch schön dass sich Leute damit befassen. :-)

Liebe Grüße,
Valle

Wolfgang Mix 9. Mär 2010 21:00

Re: Osterformel nach Computus ecclesiasticus
 
Tja Matze, dazu müsste man jetzt die mitteralterlichen Kirchenbücher studieren,
dann wäre man etwas schlauer.

Wenn jemand Lust hat ..., ich erst nach meiner Pension im Sommer :)

alzaimar 9. Mär 2010 21:05

Re: Osterformel nach Computus ecclesiasticus
 
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.

Wirklich Wolfgang. Du bist der Einzige, der tolle Beiträge und vergessene Algorithmen auskramt, aber dann zu beratungsresistent ist, den Rest noch beizusteuern. Das fing bei so einer Kalenderfunktion an, ging über diverse Beiträge, die ich vergessen konnte bis zu den quadratische Gleichungen (was war das für ein Heck-Meck) und nun wieder so ein mal wieder sehr interessanter Beitrag, der aber wieder an der Form scheitern wird und -denke ich- keinen Weg in die CL finden wird.

Wenn Dir ein Schüler mit einer Sauklaue und niedergepfuscht auf zerknülltem Papier stichpunktartig eine Hausarbeit abliefert... Wird so eine Arbeit dann prämiert, oder kommt in die Mappe: "Hausarbeiten: Exzellente Beispiele?" Und sag bloß nicht 'Ja', das glaubt man nämlich einem echten Lehrer nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:10 Uhr.
Seite 1 von 3  1 23      

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