Aufgabe zu lösen.



  • Ne, falsch.

    Ignorieren wir mal das +1.

    Wie findest du heraus wieviele tage der januar hat?

    Wenn du das weisst, dann kannst du die Monate fuer Maerz, April, Mai, Juni, Juli, August, September, Oktober, November und Dezember auch berechnen.

    Die Frage bleibt nur: was ist mit dem Feburar:

    Der hat 28 Tage, es sei denn es ist ein Schaltjahr.
    Ich wette ihr habt im Kurs schon durchgemacht wie man ein Schaltjahr berechnet.



  • ja, schaltjahr is ja eigentlich ganz isi

    if((year % 4) == 0)
    		s_month = 29;
    	else 
    		s_month = 28;
    

    aber das jetzt in die rehcnung einzubauen is ein problem für mich. haben die restlichen monate nicht immer die fixe tageszahl? wozu muss ich diese dann "berechnen"?



  • clem schrieb:

    ja, schaltjahr is ja eigentlich ganz isi

    if((year % 4) == 0)
    		s_month = 29;
    	else 
    		s_month = 28;
    

    naja, nicht ganz:

    aus wikipedia
    Alle Jahre, welche durch 4 ohne Rest teilbar sind, sind Schaltjahre.
    Alle Jahre, welche durch 100 ohne Rest teilbar sind, sind keine Schaltjahre.
    Alle Jahre, welche durch 400 ohne Rest teilbar sind, sind wiederum Schaltjahre.

    aber das jetzt in die rehcnung einzubauen is ein problem für mich. haben die restlichen monate nicht immer die fixe tageszahl? wozu muss ich diese dann "berechnen"?

    exakt. fuer januar,maerz,april,mai,juni,juli, august,september,oktober,november und dezember ist die tages anzahl immer fix.

    du musst aber fuer jedes jahr rausfinden wieviele tage der februar hat.
    aber das sollte ja mit der wikipedia beschreibung moeglich sein, oder?



  • int dayOfWeek(int day, int month, int year)
    {
    int day_week = (month + day + year + year/4 - year/100 + year/400);
    
    day_week = day_week % 7;
    
    return day_week;
    }
    

    so irgendwie?



  • clem schrieb:

    int dayOfWeek(int day, int month, int year)
    {
    int day_week = (month + day + year + year/4 - year/100 + year/400);
    
    day_week = day_week % 7;
    
    return day_week;
    }
    

    so irgendwie?

    Du hast doch sicher einen Compiler, in dem du testen kannst, was du codest, oder!?

    Also frag nicht "so irgendwie?", sondern gibt deine Testdaten ein und schau nach, was hinten rauskommt.



  • ja ok habs compliert und es komtm freitag raus! also isses falsch!



  • In Anbetracht der Tatsache, dass du es scheinbar wirklich nicht hinbekommst, ist hier der Algorithmus (ich hoffe, ich hab nix vergessen, wenn ja, dann bitte berichtigen 😉 ). Kann auch sein, dass es noch einfacher geht...

    1) Berechne, wieviele Jahre seit damals vergangen sind.
    2) Gehe jedes Jahr durch und prüfe, ob es ein Schaltjahr war.
       (Wenn ja -> 366 Tage, Wenn nicht -> 365 Tage)
    3) Berechne die verbleibende Differenz zwischen den Monaten beider Daten.
       (Wenn ein Februar dabei ist -> checken, obs ein Schaltjahr ist)
       (Wenn ja -> 29 Tage, Wenn nicht -> 28 Tage)
    4) Berechne die verbleibende Differenz zwischen den Tagen beider Daten.
    5) Summiere alles auf.
    6) Addiere 1.
    7) Gib das Ergebnis modulo 7 zurück.
    

    Das musst du jetzt nur noch in C umsetzen.



  • dankesehr. dann versuch ichs mal umzusetzen!

    edit: wie gehe ich die jahre durch und überprüfe das? sagt mir bitte infach wie da der code is. dann versteh ichs auch leichter!



  • den rest solltest du alleine loesen koennen:

    int day=1; // 1.1.1901 = dienstag;
    
    // schleifenzaehler
    int year;
    int month;
    
    int inputyear= xxxx; // >=1901
    int inputmonth= yy;  // 1..12
    int inputday= zz;    // 1..31
    
    int daysPerMonth[12]={31,28,31,30,...};
    
    // jahre durchgehen
    for (year=1901;year<inputyear;year++)
    {
      if (schaltjahr(year))
        day+=366;
      else
        day+=365;
    }
    
    // monate durchgehen
    // ...
    
    // restliche tage addieren
    // ...
    

    extrapunkte gibt's vermutlich, wenn die berechnung des wochentags eines datums vor 1901 auch funktioniert...



  • danke! das hilft mir SEHR weiter 🙂


Anmelden zum Antworten