Aufgabe zu lösen.
-
Hi, hab eine Hausübung bekommen und weiss teilweis enicht wie ich das angehen soll. Es handelt sich um folgende Angabe:
int dayOfWeek(int day, int month, int year) Diese Funktion berechnet für ein gültiges Datum den dazugehörigen Wochentag als Zahl zwischen 0 (für Montag) und 6 (für Sonntag). Dazu berechnen wir die Anzahl der Tage, die seit dem 1.1.1901 vergangen sind (natürlich unter Berücksichtigung von Schaltjahren!), und addieren 1 (der 1.1.1901 war ein Dienstag). Das Ergebnis modulo 7 ist dann der Wochentag.
gut, die variablen day, month, year etc. sind alle da. diese werden durch eingabe und scanf ermittelt im DD/MM/YYYY format. aber wie ich diese formel aufstelle weiss ich nicht. könnt ihr mir da helfen?
-
wenn du tag, monat und jahr hast, wie kommst du dann auf den wochentag?
beschreibe, was du mit papier und bleistift machen wuerdest.nein, hier werden keine hausaufgaben gemacht. hilfe ja, vorkauen nein.
-
wenn irh mir wenigstens beim ansatz helfen könntet?
-
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=DonnerstagOk, 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?