Aufgabe zu lösen.



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



  • 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!


Anmelden zum Antworten