Bitte helft mir beim Programmieren



  • Hallo!
    Wer kann mir helfen? Ich muss für die Schule ein Programm schreiben. Der Benutzer soll eine Jahreszahl von 1949 bis 2002 eingeben und den Monat. Das Programm soll nun zu diesem Monat das Kalenderblatt ausgeben. Also wenn der 1. des Monats ein Sonntag ist, dann soll die eins unter dem Sontag stehen. Wie bei einem Kalenderblatt eben! Versteht ihr?! Ich hab leider keinen Plan wie ich das machen soll. Wer also Ahnung davon hat könnte mir helfen. Ich wäre euch echt dankbar!



  • In welcher Sprache 'willst' Du das schreiben??

    Was hast Du denn schon??



  • Du solltest wissen, dass wir hier keine Programmiermaschine sind; also nicht "Aufgabe rein - Programm raus".
    Du musst schon etwas Eigeninitiative mitbringen.



  • In C / c++ muss ich das schreiben und ich soll das mit Borland machen! Wichtig ist ja eigentlich nur, dass ich weiß wie ich das hinkriege, das der 1. des Monats auch unter dem richtigen Tag steht. den Rest krieg ich selber hin! (d.h. zum Beispiel die Schaltjahre mit einbeziehen).
    Meine Erklärung ist bestimmt besch..., aber ich weiß net wie ich es anders erklären soll!
    Ricky



  • Hmm, ich tippe dir mal was aus einem Buch ab:

    int GetDayOfWeek(int year, int month, int day)
    {
       int retval = year * 365 + day + ((month - 1) * 31);
       if(month > 2)
          retval = retval - (((((month * 40) + 230) / 100) - (year / 4))
                             + ((((year / 100) + 1) * 3) / 4));
       else
          retval = retval + ((((year - 1) / 4) + ((((year - 1) / 100) * 3) / 4)) - 1);
       retval %= 7;
    
       if(retval < 2)
          retval += 5;
       else
          retval -= 2;
    
       return retval;
    }
    

    Diese Funktion berechnet dir den Wochentag (0=Mo, 1=Di,...), abhängig vom Datum. Müsste dir weiterhelfen.



  • Ich poste mal die Funktion aus meiner Datumsklasse:

    unsigned short Date::DayOfWeek() const // NOTE: 1.1.2001 was a Monday(1).
    {
        unsigned long weekday;
        if(m_year==2001)
            weekday=1;
        else if(m_year<2001)
        {
            weekday=4294967293; // number has to be very large and dividable by 7
            for(long i=2000;i>=m_year;--i)
            {
                if(DayOfYear()<60 && IsLeap(i+1))
                    --weekday;
                else if(DayOfYear()<60 && IsLeap(i))
                    weekday-=2;
                else if(IsLeap(i+1))
                    weekday-=2;
                else
                    --weekday;
            }
        }
        else // m_year must be larger than 2001
        {
            weekday=1;
            for(long i=2002;i<=m_year;++i)
            {
                if(DayOfYear()<60 && IsLeap(i))
                    ++weekday;
                else if(DayOfYear()<60 && IsLeap(i-1))
                    weekday+=2;
                else if(IsLeap(i))
                    weekday+=2;
                else
                    ++weekday;
            }
        }
        weekday%=7;
        if(m_year<2001 && DayOfYear()>59 && IsLeap(m_year))
            weekday=weekday+DayOfYear()-2;
        else 
            weekday=weekday+DayOfYear()-1;
        return (unsigned short)weekday%7;
    }
    

    DayOfYear() ist eine Funktion, die Tag/Monat in eine Zahl von 1 bis 366 umwandelt.


Anmelden zum Antworten