Osterformel nach Lichtenberg

  • Hi,

    fragt mich nicht wozu man das brauchen kann XD. Aber hier mal eine Funktion um den Ostersonntag nach der Osterformel von Lichtenberg (nicht von Gauß) zu berechnen:

    Spoiler anzeigen
    [autoit]

    ; #FUNCTION# ;===============================================================================
    ;
    ; Name...........: osterformel
    ; Description ...: Berechnet an welchem Tag in einem gegebenen Jahr Ostersonntag ist
    ; AutoIt Version : V3.3.8.1
    ; Syntax.........: osterformel($jahr)
    ; Parameters ....: $jahr - Die Jahreszahl
    ; Return values .: Success - Returns : Das Datum wann Ostersonntag ist
    ; Author ........: chip
    ;

    [/autoit] [autoit][/autoit] [autoit]

    Func osterformel($jahr)
    $a = Mod($jahr, 19)
    $k = Round($jahr / 100)

    [/autoit] [autoit][/autoit] [autoit]

    $m = 15 + Round((3 * $k + 3) / 4) - Round((8 * $k + 13) / 25)

    [/autoit] [autoit][/autoit] [autoit]

    $d = Mod(19 * $a + $m, 30)
    $s = 2 - Round((3 * $k + 3) / 4)
    $r = Round($d / 29) + (Round($d / 28) - Round($d / 29)) * Round($a / 11)
    $og = 21 + $d - $r
    $sz = 7 - Mod(($jahr + Round($jahr / 4) + $s), 7)
    $oe = 7 - Mod(($og - $sz), 7)

    [/autoit] [autoit][/autoit] [autoit]

    $os = ($og + $oe) - 1

    [/autoit] [autoit][/autoit] [autoit]

    If $os > 31 Then
    Return ($os - 31 & ". April")
    Else
    Return ($os & ". März")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>osterformel

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Zitat von chip

    fragt mich nicht wozu man das brauchen kann XD


    Das ist gaaaanz wichtig für Handel und Hersteller: So läßt sich ganz genau bestimmen, wann Werbung von Weihnachten auf Ostern umgestellt werden muß..
    ..und was noch wichtiger ist: wann die Produzenten die Osterhasenformen gegen die Weihnachtsmannformen austauschen müssen..
    Außerdem läßt sich damit ausrechnen, wieviel Tage zwischen Ostern und Weihnachten liegen (oder umgekehrt, je nach Schokoladenabhängigkeitsgrad) ^^
    Denn ersthaft: alle beweglichen Feiertage hängen von Ostern ab, doch das weiß ja jeder, der Wikipedia kennt..
    (Link für die Anderen: https://autoit.de/www.gidf.de)
    ..warum Weihnachten sich dieser Formel entzieht, weiß ich auch nicht :rofl:
    Ich kann die Formel gebrauchen, um sie mit der Formel nach Gauß zu vergleichen(Geschwindigkeitstechnisch gesehen..)
    (Außerdem habe ich noch eine Formel, Algorithmus von Oudin, der auch noch in den Vergleich einfließen könnte)
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

  • Hi,
    das ist nicht wirklich ein Doppelpost ;)
    Nachdem ich jetzt(mit FreeBasic) die Formeln von (Gauss,) Lichtenberg und Oudin verglichen habe, kann ich mit Bestimmtheit sagen:
    Die Formel von Gauss ist nicht für die Berechnung von Osterdaten geeignet :D
    Die beiden anderen liefern fehlerfrei die richtigen Osterdaten, wobei der Algo von Oudin nur marginal schneller ist als der von Lichtenberg(der schnellste ist der von Gauss, allerdings mit der 'Einschränkung', daß er nicht fehlerfrei ist :rofl: )

    Spoiler anzeigen
    [autoit]

    ; #FUNCTION# ;===============================================================================
    ;
    ; Name...........: Easterformula of Oudin
    ; Description ...: Evaluates eastersunday of a given year
    ; AutoIt Version : V3.3.8.1
    ; Syntax.........: Oudin($Year)
    ; Parameters ....: $Year - Year as Integer
    ; Return values .: Success - Returns : The date od EasterSunday
    ; Author ........: ytwinky
    ;
    Local $y=1981; try also 1954: April, 18; the Gaussian formula returns different values in these years..
    Do
    $y=InputBox('EasterDate(Oudin-Version)', 'Eastersunday ' &$y &': ' & Oudin($y) &@CrLf &'Which year now:', '', '', 200, 120)
    Until $y=0

    [/autoit] [autoit][/autoit] [autoit]

    Func Oudin($Y); Algorithm of Oudin modified by ytwinky, no need to say:still working ;)
    ;in my first try to port this from FreeBasic to AutoIt I used Round() instead of Int(); guess which one is right^^
    ;in my tests with FreeBasic Oudin seems to be a little bit faster than Lichtenberg..
    Local $G=$Y-19*Int($Y/19), $C=Int($Y/100), $C4=$C-Int($C/4), $E=Int((8*$C+13)/25), $H, $K, $PQ, $I, $B, $J1, $OS
    $H=19*$G+$C4-$E+15-30*Int((19*$G+$C4-$E+15)/30)
    $K=Int($H/28)
    $PQ=Int(29/($H+1))*Int((21-$G)/11)
    $I=($K*$PQ-1)*$K+$H
    $J1=$Y+Int($Y/4)+$I+2-$C4
    $OS=28+$I-($J1-7*Int($J1/7))
    If $OS<32 Then Return 'March, ' &$OS
    Return 'April, '&($OS-31)
    EndFunc ;xmas may come..

    [/autoit]

    Ich habe das Programm in Englisch geschrieben, aber es dürfte auch für weniger Geübte nicht schwer sein, eine deutsche Version davon zu erstellen..
    Viel Spaß beim Vergleichen der Ergebnisse
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..