Aufgabe zu lösen.



  • int dayOfWeek(int day, int month, int year) {
        //Hier deinen Code einfügen
    }
    
    int main() {
        printf("Day: %d", dayOfWeek(11, 11, 1911));
        return 0;
    }
    

    So den Anfang ist gemacht, jetzt ists doch einfach.



  • Klar ein tip:

    Fang klein.

    Rechne dir erstmal den Wochentag fuer den 3.1.1901 aus und dann fuer den 7.1.1901

    dann fuer den 1.2.1901

    und dann schau nach ob du ein muster erkennst.



  • ja und wie genau rechne ich das aus? wenn ich das wüste, würd ich hier nicht posten!



  • Wenn der 1.1.1901 ein Dienstag war, was war dann der 3.1.1901?



  • ja donnerstag, is klar. aber ich die anzahl der tage seit dem 1.1.1901 berechne schnall ich nicht. 😞



  • clem schrieb:

    ja donnerstag, is klar. aber ich die anzahl der tage seit dem 1.1.1901 berechne schnall ich nicht. 😞

    wieviele tage hat denn ein monat?
    wieviele tage hat ein jahr?



  • naja, kann nicht irgendwer ein codebeispiel geben? dann versteh ichs auch. und was bedeutet dieses modulo 7?



  • clem schrieb:

    ok jetzt schnall ichs. und was bedeutet dieses modulo 7?

    Wieviele Tage sind vergangen bis zum 2.1.1901?

    1 - also welcher Tag ist? Dienstag+1 == Mittwoch

    Wieviele Tage sind vergangen bis zum 10.1.1901?

    9 - also welcher Tag ist? Dienstag+9 == ?

    Ok, Dienstag+9 geht nicht. Die Woche hat nur 7 Tage. Dienstag+7=Dienstag
    Dienstag+2=Donnerstag

    Ok, wie kommen wir von 9 auf 2?
    Wir muessen 7 sooft abziehen bis es nicht mehr geht, das was rest bleibt ist dann die Zahl die wir suchen.

    Aber warte mal... sooft abziehen... Das klingt mir vertraut:
    Dividieren
    Und wie bekomme ich bei einer Division den Rest? Modulo



  • ja gut. und wie programmier ich das, wenn ich z.b. als datum 23.04.2005 hab und ich die tage vom 1.1.1901 bis dahin rechnen will? ich steh voll auf der leitung!



  • fuer jedes ganze jahr kannst du erstmal 365 addieren - beim schaltjahr einen mehr.



  • clem schrieb:

    ja gut. und wie programmier ich das, wenn ich z.b. als datum 23.04.2005 hab und ich die tage vom 1.1.1901 bis dahin rechnen will? ich steh voll auf der leitung!

    wieviele tage hat ein monat?

    wenn du das beantworten kannst, kannst du beantworten wieviele tage ein jahr hat

    bis zum 23.4.2005 sind es somit:

    22 Tage
    3 Monate
    104 Jahre



  • ja theorietisch versteh ich sja, aber praktisch nicht. könnt ihr nichtmal kleine code beispiele geben? wär nett von euch!



  • clem schrieb:

    ja theorietisch versteh ich sja, aber praktisch nicht. könnt ihr nichtmal kleine code beispiele geben? wär nett von euch!

    Nein. Denk selber.
    Der Sinn einer Aufgabe ist es, dass du etwas lernst.

    Mach aus den Tipps mal etwas.

    Sag mir welcher Tag der 1.2.1901 war.
    und zeig mir den code den du verwendet hast um die antwort zu berechnen.



  • verstehst du nicht? ich weiß nicht einmal wie ich es angehen soll? for schleife? so irgendwie?



  • Sagen wir mal ganz unpolitisch vom 11. September 2001 bis zum 20. September 2001 sind es 9 Tage

    tage = 20-11;
    print tage
    9
    wochen = tage/7;
    rest   = tage%7;
    print wochen
    1
    print rest
    2
    

    Wenn also der 11 ein Donnerstag gewesen wäre, dann wäre der zwanzigste Donnerstag + rest = Samstag

    Man beachte die Anzahl der Wochen ist unerheblich



  • clem schrieb:

    verstehst du nicht? ich weiß nicht einmal wie ich es angehen soll? for schleife? so irgendwie?

    mit stift und papier

    du nimmst dir einen bleistift und ein stueck papier und setzt dich hin.
    du suchst dir 3 daten aus und rechnest fuer diese haendisch den wochentag aus.

    und dann hast du bereits einen algorithmus den du in C implementieren kannst.



  • Wenn Du schon von for-Schleife redest, dann sind vielleicht andere Dinge etwas schnell an Dir vorbeigerauscht. Gehört dazu vielleicht das 'Frame' einer Funktion?

    int dayOfWeek(int day, int month, int year)
    {
      int antwort;
    
      antwort = (day-1) + 30*(month-1) + 365*(year-1901);
    
    /* das gäbe jetzt die Anzahl in Tagen, wenn da nicht das Problem mit der unterschiedlichen Taganzahl der Monate wäre, und die Sache mit dem Schaltjahr */
    
      antwort = antwort % 7;
    /* und jetzt hat die modulo-Funktion ihre Arbeit gemacht
      und alles in den Bereich 0...6 gebracht */
    
      return antwort;
    /* damit wird der Wert zurückgegeben. 
     Aber ... nicht nur, dass das Problem mit Monat und Schaltjahr noch zu lösen ist,
     die Falle ist hier noch, dass für den 1.1.1901 eine 0 zurückgegeben wird, es aber ein Dienstag war.
     Dieses +1, von dem die Rede war, muss auch noch irgendwo rein. Wo? */
    }
    

    Soooo einfach wäre das im Prinzip.
    Welche Möglichkeiten fallen Dir ein, um die drei bestehenden Probleme zu lösen?



  • ok danke 🙂

    also das problem mit dem +1, löst man denk ich so:

    antwort = (day-1) + 30*(month-1) + 365*(year-1901) + 1;
    

    aber das mit den schaltjahren und unterschiedlichen tagen weiss ich noch imme rnicht.



  • 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"?


Anmelden zum Antworten