Turbo c++, Ostern + Pfingsten ausrechnen



  • Hi,

    also ich hab da ein Beispiel und schaff es nicht Pfingsten auszurechen. Ich hoffe ihr könnt mir helfen

    hier mal der Angabezettel

    Beispiel 1: OSTERN

    Fragestellung:
    Wie läßt sich das Datum für Feiertage (zb. Ostern oder Pfingsten) für die kommenen Jahre berechnen ?

    Antwort:
    Ostern fällt jeweils auf den 1. Sonntag nach Frühlingsvollmond. Somit sind die Vollmonddaten zu bestimmen, wobei die Schaltjahre in die Berechnung mit eingehen.

    Der folgende Algormithmus ist für die nächsten 100 Jahre gültig:

    Sei

    a : = Rest der Division Jahrezahl / 19
    b : = Rest der Division Jahreszal / 4
    c : = Rest der Division Jahreszahl / 7
    d : = Rest der Division (19a + 24) / 30
    e : = Rest der Division (2b + 4c + 6d + 5) / 7

    In C berechnet man den Rest übrigens mit Rest = Dividend % Divisor

    Für (d+e) < 10 ist dann Ostern am (22+d+e)-ten März, also für (d+e) > 9 ist Ostern folglich am (d+e-9)-ten April.

    Ausnahme: Für (d+e) = 35 oder für d = 28 und e = 6 und a > 10 fällt der Ostersonntag auf den (d+e-16)-ten April.

    Mit dem Osterdatum liegen auch die anderen Feiertage im Mai und Juni fest.

    Beispiel: Wann ist im Jahre 2000 der Pfingstsonntag ?

    Pfingsten folgt genau 7 Wochen nach Ostern. Berechne also den Ostersonntag für das Jahr 2000

    a : = Rest Der Division 2000 / 19 daraus folgt: a = 5
    b : = Rest der Division 2000 / 4 daraus folgt: b = 0
    c : = Rest der Division 2000 / 7 daraus folgt: c = 5
    d : = Rest der Division (19a + 24) / 30 daraus folgt: d = 29
    e : = Rest der Division (2b + 4c + 6d + 5) / 7 daraus folgt: e = 3

    Der Ostersonntag im Jahre 2000 fällt auf den (29+3-9)-ten April – also auf den 23. April. Folglich ist der Pfingstsonntag am 11.06.00.

    und hier mein quelltext um ostern auszurechnen

    #include <iostream.h>
    
    #include <conio.h>
    
    #include <ctype.h>
    
    void main (void)
    
    {
    
     char jn;
    
     do
    
     {
    
      int jz, tag, a,b, c, d, e;
    
      clrscr ();
    
      cout << "Bitte geben Sie die Jahreszahl ein: ";
    
      cin >> jz;
    
      a = jz % 19;
    
      b = jz % 4;
    
      c = jz % 7;
    
      d = (19 * a + 24) % 30;
    
      e = (2 * b + 4 * c + 6 * d + 5) % 7;
    
       if ((d + e) < 10)
    
       {
    
        tag = 22 +d + e;
    
        cout << "Der Ostersonntag ist im Jahr " << jz << " am " << tag << " M„rz";
    
       }
    
       if ((d + e) > 9)
    
       {
    
        tag = d + e - 9;
    
        cout << "Der Ostersonntag ist im Jahr " << jz << " am " << tag << " April";
    
       }
    
        if ((d + e) == 35 || d == 28 && e == 6 && a > 10)
    
       {
    
         tag = d + e - 16;
    
         cout <<"Der Ostersonntag ist im Jahr " << jz << " am " << tag << " April";
    
       }
    
      cout << "\nWollen Sie das Programm Wiederholen? J/N ";
    
      cin >> jn;
    
     } while (toupper (jn) == 'J');
    
    }
    

    danke im voraus

    mfg ein verzweifelter panther 😞



  • void __fastcall TFormFeiertag::CalcHolidays(short sYear, int* ilDayNoArray)
    {
        TDateTime dtFirstDate = TDateTime(sYear, 1, 1);
        TDateTime dtTmpDate;
        int mD = (19 * (sYear % 19) + 24) % 30;
        int mE = ((6*mD-sYear-sYear/4+sYear/100-sYear/400+4)%7+7)%7+mD+22;
        int mM; if(mE > 31) {mM = 4; mE -= 31;} else mM = 3;
        dtTmpDate = TDateTime(sYear, short(mM), short(mE));
        ilDayNoArray[2]  = int(dtTmpDate - dtFirstDate - 1);
        ilDayNoArray[3]  = ilDayNoArray[2] + 3;
    }
    
    wobei ilDayNoArray[2] = karfreitag
    und   ilDayNoArray[3] = oster montag
    


  • Tipp: Mach nicht nach jeder Codezeile eine Leerzeile. Dadurch wird der Code IMHO schwerer zu lesen.
    Außerdem ist es nicht sinnvoll, ctype.h nur wegen dem J zu inkludieren.

    do
    {
    //....
    } while (jn != 'J' || jn != 'j');
    


  • Original erstellt von <xxx>:
    **Außerdem ist es nicht sinnvoll, ctype.h nur wegen dem J zu inkludieren.
    **

    doch, find ich schon.


Anmelden zum Antworten