ostern berechnen

  • Hallo Leute

    jaja ich weiss, bugfix hat schon eine funktion gemacht, aber ich wollte mal selber eine realisieren (leider geht sie aber nicht.. :thumbdown: :thumbdown: )

    [autoit]


    #include <Date.au3>

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

    $ostern = _ostern(2009)
    MsgBox(0,"",$ostern)
    ;~ $findDiv = _div(5,3.3)
    ;~ MsgBox(0,"", $findDiv)

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

    Func _ostern($year)
    $d0 = Mod ($year, 19)
    $d1 = Mod ($year, 4)
    $d2 = Mod ($year, 7)
    $d3 = _div(((_div($year, 100) * 8) + 13), 25-2)
    $d4 = (_div($year, 100)) - (_div($year, 400)) - 2
    $d5 = Mod((15 + $d4 - $d3), 30)
    $d6 = Mod((6 + $d4), 7)
    $d7 = Mod((19 * $d0 + $d5), 30)
    $d8 = $d7

    If $d7 = 29 Then $d8 = 28
    If $d7 = 28 And $d0 > 10 Then $d8 = 27

    $d9 = Mod((( 2 * $d1) + (4 * $d2) + (6 * $d8) + $d6), 7)
    $ostern = $d8 + $d9 + 22

    $march = String($year & "/" & 03 & "/" & 01)
    $calc = _DateAdd('D', $ostern, $march)

    Return $calc
    EndFunc

    Func _div($c, $d)
    $div = $c / $d
    $roundDiv = Round($div, 1)
    $stringRight = StringRight($roundDiv, 1)

    If $stringRight >= "5" Then
    $roundedDiv = Round($roundDiv - 1, 0)
    Else
    $roundedDiv = Round($roundDiv, 0 )
    EndIf

    Return $roundedDiv
    EndFunc

    [/autoit]

    Habe dafür Gauss formel benutzt : http://www.serve.com/jb/ostern.htm

    kann mir jemand erklären wo der fehler liegt??

    grüsse

  • Moin,

    bei mir geht's so:

    Spoiler anzeigen
    [autoit]

    ;
    ConsoleWrite ("> "& OSTERN_GAUSS (2009) & @crlf)

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

    func OSTERN_GAUSS ($iJahr)
    ;~ { Ostern faellt auf den n. Maerz. Beisp.: OSTERN=33 bedeutet 2.April }
    ;~ { Quelle: MONOID Mathematik-Blatt Karolinen-Gymn. Frankenthal Maerz 1992 }
    ;~ { Nach der Gauss-Formel aus dem Jahre 1800. Gueltig fuer 1583 bis 8702 }
    Local $a,$b,$c,$d,$e,$f,$g,$h,$i,$j

    $a = mod ($iJahr, 19);
    $b = mod ($iJahr, 4);
    $c = mod ($iJahr, 7);
    $d = int (( ( ($iJahr / 100) * 8 ) + 13 ) / 25 - 2);
    $e = int (($iJahr / 100) - ($iJahr / 400) - 2);
    $f = mod ((15 + $e - $d), 30);
    $g = mod ((6 + $e), 7);
    $h = mod ((19 * $a + $f), 30);
    $i = $h;
    if ($h == 29) then $i = 28;
    if ( ($h == 28) and ($a > 10) ) then $i = 27;
    $j = mod (( (2 * $b) + (4 * $c) + (6 * $i) + $g ), 7);
    $OSTERN_GAUSS = $i + $j + 22;

    if ($OSTERN_GAUSS <= 31) then
    return StringFormat ("%02d.%02d.%d", $OSTERN_GAUSS, 3, $iJahr)
    else
    return StringFormat ("%02d.%02d.%d", ($OSTERN_GAUSS - 31), 4, $iJahr)
    endif

    endfunc

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

    Exit (0)
    ;

    [/autoit]


    Gruß
    Greenhorn


    Einmal editiert, zuletzt von Greenhorn (13. Mai 2009 um 22:14)

  • Wieso eigentlich immer Ostern?
    Christi Himmelfahrt ist doch etwas das man genauso berechnen kann oder Pfingsten, was dann auch zwei Tage hat.

    Wieso gibt es Ostern Ostereier, aber nichts zu Pfdingsten oder Himmelfahrt? Astro-Berechnungen sind doch irgendwie komisch. Mag ich gar nicht.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Hallo Alina,

    es gibt viele Feiertage die von Ostern abhängig sind, Christihimmelfahrt und Pfingsten gehören dazu. Um also diese berechnen zu können, muss man(n frau auch) zuerst Ostern berechnen. Die mir bekannten von Ostersonntag abhängigen Feiertage sind:

    Karfreitag: - 2
    Ostersamstag: - 1
    Ostermontag: + 1
    Christi Himmelfahrt: + 39
    Pfingstsonntag: + 49
    Pfingstmontag: + 50
    Fronleichnam: + 60

    weiterhin davon abhängig (aber keine Feiertage) sind:
    Weiberfasnacht: -52 (Donnerstag vor Faschingsdienstag)
    Faschingssontag: - 49
    Rosenmontag: - 48
    Faschingsdienstag:- 47
    Aschermittwoch: -46
    Gründonnerstag: -3

    wenn du also nicht weisst wann Ostern ist darfst kannst du auch nicht Fasching feiern festlegen, :D

    ich hoffe ich hab keinen vergessen,

    mfg (Auto)Bert

    2 Mal editiert, zuletzt von AutoBert (14. Mai 2009 um 16:25)

  • Also danke erst einmal für die Erklärung.

    Ich weiß, das diese Feier- & Partytage (Fronleichnam, Weiberfasnacht, Faschingssontag, Rosenmontag, Faschingsdienstag, Aschermittwoch und Gründonnerstag) irgendwie nur im Süden bestehen und das die dort ganz schön viel feiern und frei haben. Aber dafür sollte es doch in den bereichen andere Feiertage geben, die sie gestrichen bekommen, oder? Fair währe das auf jeden Fall. Bundesweit die gleiche Anzahl an Feiertagen, sonst fehlt die Gleichberechtigung / Gleichstellung aller Menschen !!! Das muß man wirklich mal überlegen, ob das eigentlich rechtlich zu vertreten ist, das ein Mensch der im Süden eines Landes lebt, mehr freie Arbeitstage hat, als ein Mensch der im Norden eines Landes lebt. ich glaube wenn ich damit bei einem Chef bei uns ankomme, dann ... ! Oder wenn es ein junger ist, vlllt. wittert er ja ... !!! Okay, lassen wir es, denn die Amerikaner sind da noch viel schlimmer. Da gibt es Staaten, da haben die 72 Feiertage. Wenn man dann überlegt, das an 52 Sonntagen nicht gearbeitet wird und das einige Städte auch noch besondere weitere Feiertage haben, da frage ich mich, wo die Wirtschaft hin geht. ;)

    Diese Tage, wo die mit Bonbons schmeißen, sind aber doch keine Feiertage, sondern das närrische Treiben wird doch vom Arbeitszeitkonto abgezogen, oder? Habe da noch nie mit gemacht, aber ich sehe immer im TV, das sich die Macher da über die Politiker/innen lustig machen und das ist doch mal Humor, den man nicht eingrenzen sollte, wie es dieses Jahr war, wo sie die Frau Merkel nachträglich noch bekleiden mußten. Sind die Politiker echt so stuuuuuurrrrrr? Spass am leben kennen die wohl nicht. :( Hätten die Wagenbetreiber lieber das gesicht mit einem großen Tuch verdekcen sollen und da drauf schreiben sollen "Hier hinter ist versteckte Politik" !!!

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Hi,

    die von Lichtenberg ist doch noch besser, oder nicht?

    Mega


    Hi Mega,

    habe ich mir angesehen, aber kriege ich nicht zum Laufen ...
    Meine letzte Mathestunde ist auch schon 2o Jahre her und befand sich auch keineswegs auf dem Gauss'schen Level. ;)

    Was ist an der Übersetzung falsch ???

    Spoiler anzeigen
    [autoit]

    ;
    ;~ 1. die Säkularzahl: K(X) = X div 100
    ;~ 2. die säkulare Mondschaltung: M(K) = 15 + (3K + 3) div 4 - (8K + 13) div 25
    ;~ 3. die säkulare Sonnenschaltung: S(K) = 2 - (3K + 3) div 4
    ;~ 4. den Mondparameter: A(X) = X mod 19
    ;~ 5. den Keim für den ersten Vollmond im Frühling: D(A,M) = (19A + M) mod 30
    ;~ 6. die kalendarische Korrekturgröße: R(D,A) = D div 29 + (D div 28 - D div 29) (A div 11)
    ;~ 7. die Ostergrenze: OG(D,R) = 21 + D - R
    ;~ 8. den ersten Sonntag im März: SZ(X,S) = 7 - (X + X div 4 + S) mod 7
    ;~ 9. die Entfernung des Ostersonntags von der
    ;~ Ostergrenze (Osterentfernung in Tagen): OE(OG,SZ) = 7 - (OG - SZ) mod 7
    ;~ 10. das Datum des Ostersonntags als Märzdatum
    ;~ (32. März = 1. April usw.): OS = OG + OE

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

    ConsoleWrite ("----------------------------------" & @crlf)
    ConsoleWrite ("> OsternLichtenberg : " & _
    Ostern_LichtenbergJulsch (2009) & @crlf)
    ConsoleWrite ("> OSTERN_GAUSS : "& _
    OSTERN_GAUSS (2009) & @crlf)
    ConsoleWrite ("----------------------------------" & @crlf)

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

    Func Ostern_LichtenbergGregsch ($iJahr)

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

    Local $A,$K,$M,$S,$D,$R, $OG,$SZ,$OE,$OS

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

    $K = int ( $iJahr / 100 )
    $M = int ( 15 + (3 * $K + 3) / 4 - (8 * $K + 13) / 25 )
    $S = int ( 2 - (3 * $K + 3) / 4 )
    $A = int (mod ($iJahr, 19))
    $D = int (mod ( (19 * $A + $M), 30 ))
    $R = int ( $D / 29 + ($D / 28 - $D / 29) * ($A / 11) )
    $OG = int ( 21 + $D - $R )
    $SZ = int (mod ( 7 - ($iJahr + $iJahr / 4 + $S), 7 ))
    $OE = int (mod ( 7 - ($OG - $SZ), 7 ))

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

    $OS = $OG + $OE

    if ($OS <= 31) then
    return StringFormat ("%02d.%02d.%s", $OS, 3, $iJahr)
    else
    return StringFormat ("%02d.%02d.%s", ($OS - 31), 4, $iJahr)
    endif

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

    EndFunc
    ; Der vorstehende Algorithmus gilt für den Gregorianischen Kalender.
    ; Für den Julianischen Kalender setzt man M = 15 und S = 0.
    Func Ostern_LichtenbergJulsch ($iJahr)

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

    Local $A,$K,$M,$S,$D,$R, $OG,$SZ,$OE,$OS

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

    $K = int ( $iJahr / 100 )
    $M = 15
    $S = 0
    $A = int (mod ($iJahr, 19))
    $D = int (mod ( (19 * $A + $M), 30 ))
    $R = int ( $D / 29 + ($D / 28 - $D / 29) * ($A / 11) )
    $OG = int ( 21 + $D - $R )
    $SZ = int (mod ( 7 - ($iJahr + $iJahr / 4 + $S), 7 ))
    $OE = int (mod ( 7 - ($OG - $SZ), 7 ))

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

    $OS = $OG + $OE

    if ($OS <= 31) then
    return StringFormat ("%02d.%02d.%s", $OS, 3, $iJahr)
    else
    return StringFormat ("%02d.%02d.%s", ($OS - 31), 4, $iJahr)
    endif

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

    EndFunc

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

    func OSTERN_GAUSS ($iJahr)
    ;~ { Ostern faellt auf den n. Maerz. Beisp.: OSTERN=33 bedeutet 2.April }
    ;~ { Quelle: MONOID Mathematik-Blatt Karolinen-Gymn. Frankenthal Maerz 1992 }
    ;~ { Nach der Gauss-Formel aus dem Jahre 1800. Gueltig fuer 1583 bis 8702 }
    Local $a,$b,$c,$d,$e,$f,$g,$h,$i,$j

    $a = mod ($iJahr, 19);
    $b = mod ($iJahr, 4);
    $c = mod ($iJahr, 7);
    $d = int (( ( ($iJahr / 100) * 8 ) + 13 ) / 25 - 2);
    $e = int (($iJahr / 100) - ($iJahr / 400) - 2);
    $f = mod ((15 + $e - $d), 30);
    $g = mod ((6 + $e), 7);
    $h = mod ((19 * $a + $f), 30);
    $i = $h;
    if ($h == 29) then $i = 28;
    if ( ($h == 28) and ($a > 10) ) then $i = 27;
    $j = mod (( (2 * $b) + (4 * $c) + (6 * $i) + $g ), 7);
    $OSTERN_GAUSS = $i + $j + 22;

    if ($OSTERN_GAUSS <= 31) then
    return StringFormat ("%02d.%02d.%s", $OSTERN_GAUSS, 3, $iJahr)
    else
    return StringFormat ("%02d.%02d.%s", ($OSTERN_GAUSS - 31), 4, $iJahr)
    endif

    endfunc

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

    Exit (0)
    ;

    [/autoit]


    Gruß
    Greenhorn